F#:static let和static member

时间:2015-12-24 05:34:09

标签: static f#

我是F#中的菜鸟,目前在F#3.0中阅读专家。 它是我学习的第一个编译语言(我只知道在R中编程)

在第6章,第117页,我们的介绍没有多少仪式 static let和static成员。我真的不明白它是什么

type Vector2D(dx : float, dy : float) =
     static let zero = Vector2D(0.0, 0.0)
     static let onex = Vector2D(1.0, 0.0)
     static let oney = Vector2D(0.0, 1.0)
     /// Get the zero vector
     static member Zero = zero
     /// Get a constant vector along the X axis of length one
     static member OneX = onex
     /// Get a constant vector along the Y axis of length one
     static member OneY = oney 

没有任何例子可以在书中继续进行。

我在F#interactive中键入此内容。从那里,我如何构造一个值为零(或onex ...)的变量x?

我正在尝试以下方法。什么都不行

let x = Zero;;
let y = Vector2D(2.0,2.0);; /// ok
y.Zero;;
stdin(237,1): error FS0809: Property 'Zero' is static
http://fsharpforfunandprofit.com/posts/classes/中的

有这个例子,

type StaticExample() = 
    member this.InstanceValue = 1
    static member StaticValue = 2  // no "this"

// test
let instance = new StaticExample()
printf "%i" instance.InstanceValue
printf "%i" StaticExample.StaticValue

所以我希望y.Zero;;能够产生一些东西?...

感谢。抱歉,这个问题非常基础。如果有人能解释我的意思......

2 个答案:

答案 0 :(得分:5)

因此,基本区别在于静态成员不属于某个类的实例。

而不是y.Zero,您得到Vector2D.Zero

对于第一个近似值,您可以考虑这些类型属性的示例。

答案 1 :(得分:0)

静态成员属于声明它们的类型,并由完全限定的类型和成员名称访问。在这个例子中

let zero = Vector2D.Zero
let oneX = Vector2D.OneX
let oneY = Vector2D.OneY

Vector2D类型目前没有任何实例成员,但如果有,则可以在Vector2D

的实例上访问这些成员