繁体   English   中英

F#列出函数和let绑定:更改变量名称似乎会导致错误(运算符绑定中出现意外的中缀)

[英]F# List functions and let bindings: Changing a variable name appears to cause an error (unexpected infix in operator binding)

所以我在Try F#上有这两个文件。 (我可以看到)唯一的区别是变量名。 它们都是3行代码。 他们现在托管在Try F#上

http://www.tryfsharp.org/create/zadkielmodeler/file1.fsx

http://www.tryfsharp.org/create/zadkielmodeler/file2.fsx

文件1有效,文件2无效。

我正在努力思考为什么。 我在自己的个人项目代码中尝试过类似的情况。

let x1Points = [0..2..100]
  |> List.map (fun x-> x * x)

这在在线测试文件(file2)中产生了相同的错误

"Incomplete Value or function definition."

在第二行代码中这样说:

Unexpected infix operator in binding

老实说,我不知道那是什么意思。 无论如何,如果我能理解为什么它会在测试文件中给我这个错误,那么对于我的实际项目,我会更好地理解。 因此,请帮助我理解为什么我在file2中而不是在file1中收到此错误。

简单的缩进问题。 使用名称x将下部管道代码与标识符名称的末尾对齐。 使用xpoints会使较低的管道代码成为“越位”。 只需调整为

let xpoints =[0..100]
             |> List.filter (fun xpoints -> xpoints % 2 = 0)
             |> List.map (fun xpoints -> xpoints * 2)

甚至更好(我会说这是“标准”风格)

let xpoints =
    [0..100]
    |> List.filter (fun xpoints -> xpoints % 2 = 0)
    |> List.map (fun xpoints -> xpoints * 2)

所以您给出的示例是因为您需要更多的缩进

这有效:

 let x1Points = [0..2..100]
                |> List.map (fun x-> x * x);;

在第二个示例中,您遇到了同样的问题,将其更改为

let xpoints =[0..100]
          |> List.filter (fun xpoints -> xpoints % 2 = 0)
          |> List.map (fun xpoints -> xpoints * 2)

作品

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM