F#不支持嵌套类技术,风格,任意的原因吗?
浏览Reflector中的BCL,嵌套类用于枚举器,DynamicMetaObjects和其他一些东西.
这激起了我对F#没有这个功能的好奇心.我知道还有其他方法可以做同样的事情.我很好奇.
Tom*_*cek 20
我想嵌套类不是.NET对象模型的核心功能,它只是为了节省资源而被删除.可能存在一些技术难题(即具有可见性或具有递归类型定义),但我认为这不是一个主要问题.
对于许多在C#中使用嵌套类的情况,例如迭代器,你可以很好地使用对象表达式,所以我猜它们在某些方面替代了嵌套类:
type Collection() =
member x.GetEnumerator() =
let n = ref 0
{ new IEnumerator with
member x.Current = box n.Value
member x.MoveNext() = incr n; true
member x.Reset() = n := 0 }
Run Code Online (Sandbox Code Playgroud)
虽然这与嵌套类非常相似,但它不会编译为嵌套类,并且对象表达式的主体无法访问其私有成员Collection.我想支持这会使表达式的编译有点复杂化,因为对象表达式可能出现在类上下文之外......
实际上,private虽然代码仍未编译为嵌套类,但可以从对象表达式访问成员.请参阅评论了解详情