[英]Using properties in F#
希望這是連貫的,盡管是漫長的。
我試圖在一個.fs
文件中創建一個屬性,該屬性可以從一個單獨的.fs
文件中設置,然后在第一個.fs
文件的模塊中使用該值...例如,
在我的第一個文件function.fs
,我想定義一個屬性theta
。
然后,我想在function.fs
定義一個函數Q
:
function Q = Q(r)
和... Q(r)
取決於某些與theta
有關的計算,
即
A1(theta), A2(theta), A3(theta)
Q
返回列表形式的數據集。
我還想在我的主.fs文件program.fs
維護一組theta值(即
theta = [90;120;150;180])
然后,我想從function.fs
為每個theta
生成一個數據集。
我的想法是通過設置屬性theta的值,運行程序以生成數據集,為theta
設置新值,運行程序以生成數據集,重復……來做到這一點。從研究的角度來看,我不清楚我實際上是如何在代碼Q(r)
回想該屬性的值的。
我已經在我的function.fs
文件中成功設置了可以從program.fs
設置的屬性:
在function.fs
我有:
namespace models.test
type ContactAngle() =
let mutable m_theta = 90.0
//read only property
member this.Empty =
m_theta = 90.0
//read-write property
//i think i'm onto something with this static...
member this.Angle
with get() =
m_theta
and set newAmt =
m_theta <- newAmt
//module HTModel =
在program.fs
我有:
open models.test
let me = new ContactAngle()
printfn "%A" me.Angle
me.Angle <- 120.0
printfn "%A" me.Angle
這使我可以重新定義值theta
。 我正在苦苦掙扎的地方是我現在如何在function.fs
中的函數中使用新的屬性值。
我覺得我缺少一些基本知識,需要一些幫助! 任何見解將不勝感激!
由於函數會在不創建時就評估它們何時被調用(就像在C#中一樣),因此您可以像這樣在ContactAngle
類型中創建一個普通函數:
member this.DoSomenthingWithTheta multiplier
m_theta <- m_theta * multiplier
您可以在班級中的任何地方重用可變值。 為了闡明所有內容,您應該閱讀F#語言參考的 “成員”部分。
但是,如果您想在類型之外和沒有初始化實例的地方使用該值。 那么,您將不得不采用其他方法。 例如,創建一個靜態可變字段並使用靜態屬性公開它。 或創建一個單例以在整個應用程序中存儲您的價值。
但這殺死了函數編程的“精神” :)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.