繁体   English   中英

F#:静态let和静态成员

[英]F# : static let and static member

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

在第6章,第117页上,我们介绍了没有太多仪式的静态租用和静态成员。 我不太明白那是什么

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#交互式中输入此内容。 从那里,如何构造一个值为零(或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;; 产生以上的东西?...

谢谢。 对不起,这个问题是如此基本。 如果有人能解释我的意思...

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

而不是y.Zero ,您将获得Vector2D.Zero

大概可以想到这些类型的属性的例子。

静态成员属于声明它们的类型,并且可以通过完全限定的类型和成员名称进行访问。 在这种情况下

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

Vector2D类型当前没有任何实例成员,但是如果有,则可以在Vector2D实例上访问这些Vector2D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM