关于F#面向对象编程
我们在f#中创建类的方式存在着这种二分法,这让我非常困扰。我可以使用隐式格式或显式格式创建类。但是我想要的一些特性只能用于隐式格式,而有些特性只能用于显式格式 例如:关于F#面向对象编程,f#,oop,F#,Oop,我们在f#中创建类的方式存在着这种二分法,这让我非常困扰。我可以使用隐式格式或显式格式创建类。但是我想要的一些特性只能用于隐式格式,而有些特性只能用于显式格式 例如: 我不能在显式定义的类中使用let inline*(或let) 在隐式定义的类中定义不可变的public字段(而不是properties*)的唯一方法(据我所知)是val-bla:bla语法 但这里有冗余。因为我将得到相同的不可变数据的两个副本,一个私有,一个公共(因为在隐式模式中,构造函数参数在类存在的整个过程中都是持久的)
let inline
*(或let
)
val-bla:bla
语法
但这里有冗余。因为我将得到相同的不可变数据的两个副本,一个私有,一个公共(因为在隐式模式中,构造函数参数在类存在的整个过程中都是持久的)
let inline
,但我可以很好地使用member inline
,我假设它也可以这样做
对于
let inline
,您可以通过将其移到类外,并在调用它时显式地从类的范围内传递所需的任何值来解决此问题。因为它是内联的,所以这样做不会造成性能损失。这可能没有帮助,但您可以使成员内联。“成员内联私有”可以正常工作。“出于性能原因”?不能说我喜欢那种声音;)它主要是与图形编程相关的数字运算。请参见此处:。您的问题没有暗示您正试图解决的问题。我假设你想在C++中模仿C++风格的面向对象编程。(如果您的答案不正确,请纠正我!)。但是为什么在函数式语言中需要这个呢?我想这是您正在处理的问题所特有的,如果您在这里详细介绍一下,这可能会很有趣。构造函数参数是否仍然保留在Beta1编译器中?我以为他们会在不需要的情况下删除它。@Ganesh Sittampalam:你在哪里读到的?他们如何决定是否需要他们?谢谢,确实有用。谢谢意味着我将决定使用显式语法。