Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax 转换大型不可变消息_Syntax_F#_Functional Programming_Immutability - Fatal编程技术网

Syntax 转换大型不可变消息

Syntax 转换大型不可变消息,syntax,f#,functional-programming,immutability,Syntax,F#,Functional Programming,Immutability,来自OOP背景,我对函数式编程中不可变对象/记录/消息的概念有一些疑问 假设我通过一个函数管道传递一个PurchaseOrder记录,其中每个函数都应该在该记录中添加或更新数据 在处理可变状态时,我只需设置传递的消息的一些特定属性 在处理不可变记录时,是否有一些设计技巧可以让事情变得更简单? 为了只更改一个字段而复制每个字段只是一种痛苦 { A = x.A ; B = x.B ; C = x.C ; D = x.D ; E = somethingnew; } 我想尽可能多地分组数据是处理它的一

来自OOP背景,我对函数式编程中不可变对象/记录/消息的概念有一些疑问

假设我通过一个函数管道传递一个PurchaseOrder记录,其中每个函数都应该在该记录中添加或更新数据

在处理可变状态时,我只需设置传递的消息的一些特定属性

在处理不可变记录时,是否有一些设计技巧可以让事情变得更简单? 为了只更改一个字段而复制每个字段只是一种痛苦

{ A = x.A ; B = x.B ; C = x.C ; D = x.D ; E = somethingnew; }
我想尽可能多地分组数据是处理它的一个好方法,从而避免复制所有字段。 还有其他方法或设计指南吗?

您可以这样做

 let myRecord3 = { myRecord2 with Y = 100; Z = 2 }

(来自MSDN记录页面的示例-

我来自一个极端纯粹和极端的OOP背景,我的OOP设计往往是99%不变的对象(即使是在允许变异的语言中)。如果您有一个函数管道,其中每个函数都应该添加或更新记录中的数据,根据我的经验,每个函数都将处理该记录的子问题和子概念,因此您应该为每个函数创建一个类/类型/任何东西,以遵循OOP最佳实践,如。如果任何类/记录/类型有超过4或5个字段/变量/属性,我认为您可能在这方面承担了太多的责任。如果将问题拆分为几个子问题,那么管道的每个函数都将创建该记录的一个子记录,而主函数只会将它们组合起来创建主记录。根据我的经验,遵循传统的面向对象的设计会让你在没有任何变化的情况下实现你想要实现的目标