考虑以下代码:
type Test(a) =
member o.A = a
let test = Test(a = cos 5.)
let test2 = Test(a = 5. |> cos) // ERROR
let test3 = Test(a = (5. |> cos))
Test2 行给出错误:
“bool”类型不支持任何名为“Cos”的运算符
和
未定义值或构造函数“a”
我理解错误消息,但我想知道这不是错误吗?
考虑以下代码:
type Test(a) =
member o.A = a
let test = Test(a = cos 5.)
let test2 = Test(a = 5. |> cos) // ERROR
let test3 = Test(a = (5. |> cos))
Test2 行给出错误:
“bool”类型不支持任何名为“Cos”的运算符
和
未定义值或构造函数“a”
我理解错误消息,但我想知道这不是错误吗?
认为没关系,因为 (|>) 的优先级小于 (=) 表达式
Test(a = 5. |> cos)
被解释为
Test((a = 5.) |> cos)
这种情况下错误信息是否正确
F# 解析器将命名参数视为相等测试表达式;编译器的后期将它们解码为命名参数。因此,这是@desco 描述的优先问题。
请注意,如果您有一个布尔命名参数,您可以执行例如
F(a = true) // named param
F((a = true)) // compare local name 'a', then pass boolean as first arg
作为在极少数情况下消除歧义的一种方式,它是必需的。