2016-09-25 11 views
0

F#で非常に新しい。私はこのようなクラスを持っていますメンバ関数からクラスのメンバ変数に割り当てる方法

namespace FsharpTestSystem 

open System 
open System.IO 
open System.Text 
open System.Diagnostics 

open System.CodeDom 
open Microsoft.FSharp.Compiler.SourceCodeServices 
open Microsoft.FSharp.Compiler.Interactive.Shell 
open Microsoft.FSharp.Compiler.SimpleSourceCodeServices 

type TestSystem() = 
// Intialize output and input streams 
// Build command line arguments & start FSI session 

    let argv = [| "C:\\Program Files (x86)\\Microsoft SDKs\\F#\\4.1\\Framework\\v4.0\\fsi.exe" |] 
    let allArgs = Array.append argv [|"--noninteractive"|] 

    let sbOut = new StringBuilder() 
    let sbErr = new StringBuilder() 
    let inStream = new StringReader("") 
    let outStream = new StringWriter(sbOut) 
    let errStream = new StringWriter(sbErr) 
    let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration() 


.... 

このクラスにメンバーメソッド(関数)を追加します。しかし、残りのメンバーが見ることができるように、クラスのメンバ変数に戻り値を割り当てるにはどうすればよいですか?言い換えれば、fsisは他のメンバーによって使用される必要があります

これは、たとえばプロパティを使用することで簡単です。私は、F#システムに、それを宣言するときに何らかの形で可変であると伝える必要があると思う。あなたは限り、あなたは.LoadFsisをしないよう、それが使用されていることがわかります(私は仮定)ハッシュコードから

type TestSystem() = 
    // .... 
    [<DefaultValue>] val mutable Fsis : FsiEvaluationSession 
    member __.LoadFsis() = __.Fsis <- FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, outStream, errStream) 
    member __.UseFsis() = __.Fsis.GetHashCode() 


let ts = TestSystem() 
ts.LoadFsis() 
ts.UseFsis() 
ts.Fsis.GetHashCode() 
ts.LoadFsis() 
ts.UseFsis() 

:あなたはどのようにこのことについて...最先端に住んでいます

member this.LoadFSI() = 
    fsis = FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, outStream, errStream) 

member this.UseFSI() = 
    //I need to use fsis in here. 
+0

たとえば、fsiConfigなどをクラス内でどのように使用できますか?あなたが望むことをC#で簡単に投稿することは可能でしょうか? – s952163

+0

F#の例を変更しました。これらの変数は、この関数を初期化する以外は関係ありません。FsiEvaluationSession.Create。その後は使用されません。 – Ivan

+0

私はコンストラクタでFsiEvaluationSession.Createを実行できない理由は、そこに置くとプログラムがクラッシュすることです。私はそれをメンバー関数に入れれば動作します。しかし、どこからでも戻り値にアクセスすることはできません。 – Ivan

答えて

0

同じセッション。私はこれをもっときれいにすることができると確信しています。

関連する問題