10
|
SharePoint Newbie · 技术社区 · 14 年前 |
![]() |
1
6
有两种方法可以将功能和面向对象的范例结合起来。在某种程度上,它们是独立的,您可以编写使用类型(以F#对象形式编写)构造的不可变(函数)代码。例如
另一方面,在F#中,您也可以编写具有可变公共属性的面向对象代码,但在封面下使用一些不可变的数据结构。如果您有一些很好的函数代码,并且希望以传统(命令式/面向对象)的方式将其公开给C程序员,那么这可能很有用:
(示例取自 Chapter 9 我的书。还有一些不可变的面向对象代码的例子,例如第14章中的并行模拟。 |
![]() |
2
9
|
![]() |
3
4
here . 我使用的算法在它的核心(数组的重复变异步骤)是必需的,如果用函数式数据结构实现,将会受到影响。通过获取一个输入数组,对其进行只读复制,使其不被破坏,然后在执行算法的变异步骤后,在序列表达式中生成它的只读副本,我们在面向对象技术和函数技术之间取得了很好的平衡。链接的答案引用原始C++实现以及基准其他纯粹的功能实现答案。我的混合OO/功能实现的性能介于OO C++解决方案的优越性能和纯粹的功能性的F*解决方案之间。 这种在内部使用OO/mutable状态而在外部保持对调用者的纯状态的策略在整个F#库中使用,特别是在Seq模块中直接使用了IEnumerators。 总之,我认为在F#中使用mutable OO对于寻求性能提升的库设计人员来说是最强大的,同时保持库用户的所有功能都是纯功能的。 |
![]() |
4
3
我不知道任何F#,但我可以给你展示一个在Scala中寻找的精确语言机制的例子。如果这没有帮助,就忽略它。
我试着把它简单化。注意,我们声明了一个类来求一个范围的和,但是实现是与函数样式一起使用的。这样,我们就可以抽象出我们用来实现一段代码的范例。 |
![]() |
5
2
|
![]() |
Thomas · 使类型别名在F中不可互换# 3 年前 |
![]() |
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 7 年前 |
![]() |
Soldalma · 我可以实例化包含顶级副作用值的类吗? 7 年前 |
![]() |
matekus · F#-包含数字的字符串的自然排序 7 年前 |
![]() |
matekus · F#类型匹配-无法创建映射或匹配记录 7 年前 |
![]() |
Rob Lyndon · 未找到F#ProvidedTypes文件 7 年前 |
![]() |
red-swan · 如何将intro ML.Net演示翻译为F#? 7 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |