如何从成员函数中赋予类的成员变量

问题描述:

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需要由TestSystem的其他成员使用

在C#中,通过使用属性,这是微不足道的。我怀疑我需要告诉F#系统fsis在声明时可以以某种方式变化。

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

你住在刀刃上......这个怎么样:

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() 

从哈希码(我认为),你可以看到,只要你不这样做.LoadFsis它是使用同一届会议。我相信这可以变得更漂亮。