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

问题描述

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.

我希望看到类似别名的内容。 这样的东西存在吗?

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 |}
//                         ^^^^          ^^

解决方法

您所建议的确切语法不存在,但这正是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 |}

在您的问题中,您说“ ,而没有将其分配给另一个绑定”,但是您的最后一个示例只是这样做:它将f a b c绑定到y(这就是为什么正是let所做的事情。

这使我认为,“另一种绑定”是指比绑定更具体的内容。也许,如果您弄清了什么,更重要的是,为什么它对您不起作用,我们可能会提出更好的解决方案。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...