簡體   English   中英

在F#中使用屬性

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM