簡體   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