来自 C#,试图让我了解这门语言。
据我了解,F# 的主要好处之一是您可以抛弃状态的概念,这应该(在许多情况下)使事情变得更加健壮。
如果是这种情况(如果不是,请纠正我),为什么允许我们用可变参数打破这个原则?对我来说,感觉就像它们不属于这种语言。我知道您不必使用它们,但它为您提供了偏离轨道并以 OOP 方式思考的工具。
任何人都可以提供一个例子来说明可变值在何处必不可少?
最佳答案
当前用于声明性(无状态)代码的编译器不是很聪明。这会导致大量内存分配和复制操作,这些操作相当昂贵。改变对象的某些属性允许重新使用处于新状态的对象,这要快得多。
想象你做一个游戏 10000 个单位以每秒 60 滴答的速度移动。您可以在 F# 中执行此操作,包括在单个 CPU 内核上与可变四叉树或八叉树发生冲突。
现在想象单位和四叉树是不可变的。编译器没有比每秒分配和构造 600000 个单元并每秒创建 60 个新树更好的主意。这不包括其他管理结构的任何变化。在具有复杂单元的实际用例中,这种解决方案会太慢。
F# 是一种多范式语言,使程序员能够编写函数式、面向对象的程序,并且在一定程度上可以编写命令式程序。目前,每个变体都有其有效用途。也许,在 future 的某个时候,更好的编译器将允许更好地优化声明式程序,但现在,当性能成为问题时,我们必须退回到命令式编程。
关于f# - 为什么在 F# 中允许使用可变参数?它们什么时候必不可少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29635231/