[英]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.