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.
たとえば、fsiConfigなどをクラス内でどのように使用できますか?あなたが望むことをC#で簡単に投稿することは可能でしょうか? – s952163
F#の例を変更しました。これらの変数は、この関数を初期化する以外は関係ありません。FsiEvaluationSession.Create。その後は使用されません。 – Ivan
私はコンストラクタでFsiEvaluationSession.Createを実行できない理由は、そこに置くとプログラムがクラッシュすることです。私はそれをメンバー関数に入れれば動作します。しかし、どこからでも戻り値にアクセスすることはできません。 – Ivan