Syntax 重用(匿名)记录值的最佳语法

Syntax 重用(匿名)记录值的最佳语法,syntax,f#,Syntax,F#,f是一个返回(匿名)记录的函数,例如: let f a b c = {| X = a + b; Y = c; Z = 1|} 根据元素的当前值更改元素而不将其分配给另一个绑定的语法是什么 let x1 = {| f a b c with Y = Y + 12 |} // ^ The value or constructor 'Y' is not defined. 尤其是在更复杂的情况下,例如: let x2 = if a + b

f
是一个返回(匿名)记录的函数,例如:

let f a b c =
    {| X = a + b; Y = c; Z = 1|}
根据元素的当前值更改元素而不将其分配给另一个绑定的语法是什么

let x1 = {| f a b c with Y = Y + 12 |} 
//                           ^ The value or constructor 'Y' is not defined.
尤其是在更复杂的情况下,例如:

let x2 = if a + b < c 
         then {| X = a; Y = c + b; Z = 1 |}
         else {| f a b c with Y = Y + 12 |}
//                                ^ The value or constructor 'Y' is not defined.
设x2=如果a+b

我想看看化名之类的东西这样的事情存在吗?

let x2 = if a + b < c 
         then {| X = a; Y = c + b; Z = 1 |}
         else {| (f a b c) as y with Y = y.Y + 12 |}
//                         ^^^^          ^^
设x2=如果a+b
您所建议的确切语法并不存在,但这正是
let
所做的:

let x2 = if a + b < c 
         then {| X = a; Y = c + b; Z = 1 |}
         else let y = f a b c in {| y with Y = y.Y + 12 |}
设x2=如果a+b

在您的问题中,您说“不将其分配给另一个绑定”,但您的最后一个示例就是这样做的:它将
fabc
绑定到
y
(这就是为什么
let
正是这么做的)


这让我觉得“另一个绑定”指的是比绑定更具体的东西。也许,如果您澄清这是什么,更重要的是,为什么它不适合您,我们可能会想出一个更好的解决方案。

您所建议的确切语法并不存在,但这正是
let
所做的:

let x2 = if a + b < c 
         then {| X = a; Y = c + b; Z = 1 |}
         else let y = f a b c in {| y with Y = y.Y + 12 |}
设x2=如果a+b

在您的问题中,您说“不将其分配给另一个绑定”,但您的最后一个示例就是这样做的:它将
fabc
绑定到
y
(这就是为什么
let
正是这么做的)


这让我觉得“另一个绑定”指的是比绑定更具体的东西。也许,如果您澄清这是什么,更重要的是,为什么它对您不起作用,我们可能会想出一个更好的解决方案。

我在
中搜索
。我还在学习F#,到目前为止还没有被它绊倒。非常感谢。我正在
中搜索
。我还在学习F#,到目前为止还没有被它绊倒。非常感谢。