F#类具有nice属性,参数自动成为不可变的私有字段。如果我想在外部提供一个这样的字段,我可以在下面的代码中创建一个属性,如I
:
type MyClass (i: int list) =
member this.I with get() = i
member this.foo x = i.Head + x
let mc = MyClass [0..10]
mc.foo 10 // 10
mc.I // [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
上面代码中的I
是i
使用的内存量的两倍还是只是一个返回i
值的函数?
(当然,这仅在参数使用大量内存时才有意义,而上例中并非如此)
答案 0 :(得分:6)
否:i
被存储为MyClass
内的私有字段; MyClass.I
是property,其get
函数返回所述字段的值。
list<'T>
是一种引用类型,因此将其保留在类中实际上是一个浅层副本,并且不会复制列表中的数据。