在F#中,我们创建类的方式存在这样的二分法,这让我很困扰。我可以使用隐式格式或显式格式来创建类。但是,我想要的一些功能只能与隐式格式一起使用,有些则只能与显式格式一起使用。
例如:
1. 我无法在显式定义的类内部使用let inline(或仅使用let)。 2. 在隐式定义的类内部,定义不可变的公共字段(而非属性)的唯一方法(据我所知)是使用val bla:bla语法。但这里存在冗余。因为最终会得到两个相同的不可变数据副本,一个私有的,一个公共的(因为在隐式模式下,构造函数参数会在整个类的生命周期内保留)。 3. (不太相关)需要使用属性来进行方法重载和字段默认值设置,这相当烦人。
有没有办法解决这个问题?
*出于性能原因
编辑:事实证明我两点都错了(感谢Ganesh Sittampalam & MichaelGG)。
例如:
1. 我无法在显式定义的类内部使用let inline(或仅使用let)。 2. 在隐式定义的类内部,定义不可变的公共字段(而非属性)的唯一方法(据我所知)是使用val bla:bla语法。但这里存在冗余。因为最终会得到两个相同的不可变数据副本,一个私有的,一个公共的(因为在隐式模式下,构造函数参数会在整个类的生命周期内保留)。 3. (不太相关)需要使用属性来进行方法重载和字段默认值设置,这相当烦人。
有没有办法解决这个问题?
*出于性能原因
编辑:事实证明我两点都错了(感谢Ganesh Sittampalam & MichaelGG)。
虽然我不能在隐式和显式类定义中使用
let inline
,但我可以完全使用member inline
,我认为它会做相同的事情。显然,在最新的F#版本中,不再有冗余,因为在类体中未使用的任何参数都是构造函数的局部变量。