- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
比如 Point、Size 等值类型。
我还听说 .NET 中的字符串并非真正不可变。 F# 是否使用这些或它们的替代不可变版本?
如果它使用标准的可变 BCL 类型,这不会损害 F# 在编译和运行时提供的整体不变性信任吗?
编辑:我想问的是,如果您有这些 BCL 类型的替代不可变版本,那么我就不必从头开始编写所有这些不同的 BCL 类型。或者这些类型(如 Point、Size 等)在使用 WinForms 或诸如此类的东西时仍然可变是期望的行为吗?
最佳答案
您可以在 F# 中使用 .Net BCL(基类库)中的类型。其中许多类型是可变的,因此伴随着可变数据的所有相关成本和 yield 。
虽然可以选择重新设计和实现每个可变类的不可变版本,但这通常工作量太大。不可变性可以是一个范围,而不仅仅是全有或全无,因此您通常会让算法和数据结构的一些核心位是不可变的,但是在与各种 .Net API 交互时使用可变性,使其易于交谈Web 服务,或绘制 UI,或诸如此类的东西。
也就是说,F# 运行时 (FSharp.Core.dll) 确实包含一些不可变的集合类,例如 list , Set和 Map (大致上,它们是 System.Collections.Generic 中的 List、HashSet 和 Dictionary 类的不可变对应物),因为拥有不可变集合通常很有用,例如用于多线程代码中的持久快照。
从“心态”的角度来看,我喜欢将其视为:F# 鼓励可变状态最小化。几乎每个重要的应用程序都必然会使用一些可变状态,但是如果您让您的核心数据结构和算法基本上不受可变状态的影响,那么您的代码的核心部分将获得不变性的好处。 F# 使您可以更轻松地在代码的核心获得此优势,同时仍然可以轻松添加可变状态,无论是在范围内的“口袋”中,还是在应用程序的边缘和通信边界周围。
关于c# - F# 如何处理 BCL 中数以千计的标准可变类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194815/
我是一名优秀的程序员,十分优秀!