0

うまくいけば、これは首尾一貫していますが、長々としたものです。

.fs別のファイルから設定できる1 つのファイルにプロパティを作成し、.fsその値を最初のファイルのモジュールで使用しようとしてい.fsます...たとえば、

最初のファイルfunction.fsで、プロパティを定義したいと思いますtheta

Q次に、次のような関数を定義したいと思いますfunction.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次に、 for eachからデータ セットを生成したいと思います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

私は非常に初歩的な何かが欠けているように感じ、助けが必要です! どんな洞察も大歓迎です!

4

1 に答える 1

1

関数は作成時ではなく呼び出されたときに評価されるため (たとえば、C# とまったく同じ)、次のContactAngleように型で通常の関数を作成できます。

member this.DoSomenthingWithTheta multiplier
    m_theta <- m_theta * multiplier

変更可能な値は、クラスのどこでも再利用できます。すべてを明確にするために、F# 言語リファレンスの「メンバー」セクションを読む必要があります。

ただし、その値をタイプの外で、開始されたインスタンスがない場所で使用したい場合。では、別のアプローチを取る必要があります。たとえば、静的可変フィールドを作成し、静的プロパティで公開します。または、シングルトンを作成して、アプリケーション全体で値を保存します。

しかし、この種の関数型プログラミングの「精神」を殺します:)。

于 2012-10-14T08:43:47.410 に答える