2012-10-14 87 views
0

希望這是連貫的,雖然是longwinded。在F#中使用屬性

我想創建一個.fs文件的屬性,我可以從一個單獨的.fs文件中設置,然後使用該值的一個模塊中的第一個.fs文件...例如,

在我的第一文件function.fs,我想定義一個屬性theta

話,我想在定義一個函數Qfunction.fs這樣的:

function Q = Q(r)和... Q(r)取決於一些計算依賴於theta

A1(theta), A2(theta), A3(theta)

Q以列表的形式返回數據集。

我也想保持一個組θ值在我的主文件.FS program.fs(即
theta = [90;120;150;180])

然後我想生成function.fs一個數據集爲每個theta

我的想法是通過爲屬性theta設置一個值,運行程序生成一個數據集,爲theta設置一個新值,運行該程序生成一個數據集,重複......我已經做了相當數量的的研究,我不清楚的是我如何實際記得價值o f代碼爲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的函數中使用新的屬性值。

我覺得我錯過了一些非常基本的東西,需要一些幫助!任何有識之士將不勝感激!

+0

我不認爲這是非常明確的 - 你是否在問'let rec ...和...'這樣的東西,但是跨文件嗎? –

+0

我試圖理解,但我迷路了......如果你改述並使之更簡單,我很樂意提供建議,儘管 – nicolas

+0

似乎有一個基本的誤解:你爲什麼要談論你的代碼的位置?爲了使用你需要調用它的代碼,程序不關心它定義在哪個文件中。如果你調用它並且它不知道它在哪裏,它會在編譯時出現。但之後,這是他的工作...... – nicolas

回答

1

由於功能評估時創建的時候,他們被稱爲不(完全一樣,例如C#),你可以在你的ContactAngle類型創建一個正常的功能是這樣的:

member this.DoSomenthingWithTheta multiplier 
    m_theta <- m_theta * multiplier 

您可以重用可變在班上任何地方都有價值。 澄清所有你應該閱讀F# language reference的'成員'部分。

但是,如果你想在你的類型之外和你沒有啓動實例的地方使用該值。那麼你將不得不採取不同的方法。例如,創建一個靜態可變字段並將其暴露給靜態屬性。或者創建一個單例來存儲整個應用程序的值。

但是這種殺死函數式編程的'精神':)。

+0

感謝您的反饋。你的評論讓我重新思考我想要做的事情,結果證明答案過於複雜。如果不是很明顯,我不是開發人員,但是一位正在嘗試使用F#從一篇論文複製模型的工程學學生。與其重寫我的文章,我放棄了我的第一次嘗試,將它全部放在單個文件中,並通過多個列表使用遞歸來完成我的任務,並且它工作正常!感謝您的幫助和洞察! – mike