使用F#的类型中的构造函数的命名参数

Old*_*vec 4 f# constructor types arguments named-parameters

请考虑以下代码:

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))
Run Code Online (Sandbox Code Playgroud)

Test2行给出错误:

类型'bool'不支持任何名为'Cos'的运算符

未定义值或构造函数"a"

我理解错误信息,但我想知道它不是一个错误?

des*_*sco 5

认为没关系,因为(|>)的优先级小于(=)表达式

Test(a = 5. |> cos) 
Run Code Online (Sandbox Code Playgroud)

被解释为

Test((a = 5.) |> cos) 
Run Code Online (Sandbox Code Playgroud)

并且是这种情况错误消息是正确的

  • 顶级(紧邻括号内)的`=`被解释为命名参数或字段/属性赋值.任何其他地方,它被视为一个相等的测试. (2认同)