我是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;;
能够产生一些东西?...
感谢。抱歉,这个问题非常基础。如果有人能解释我的意思......
答案 0 :(得分:5)
因此,基本区别在于静态成员不属于某个类的实例。
而不是y.Zero
,您得到Vector2D.Zero
。
对于第一个近似值,您可以考虑这些类型属性的示例。
答案 1 :(得分:0)
静态成员属于声明它们的类型,并由完全限定的类型和成员名称访问。在这个例子中
let zero = Vector2D.Zero
let oneX = Vector2D.OneX
let oneY = Vector2D.OneY
Vector2D
类型目前没有任何实例成员,但如果有,则可以在Vector2D