如何从成员函数中赋予类的成员变量
问题描述:
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.
答
你住在刀刃上......这个怎么样:
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
它是使用同一届会议。我相信这可以变得更漂亮。
例如fsiConfig等在您的课堂内是否可用?是否有可能在C#中发布一些简单的内容,以达到您想要的效果? – s952163
我修改了F#示例。除了初始化这个函数FsiEvaluationSession.Create以外,这些变量是无关紧要的。之后,他们不使用。 – Ivan
顺便说一句,我不能在构造函数中执行FsiEvaluationSession.Create的原因是,如果我把它放在那里,程序就会崩溃。如果我把它放在一个成员函数中,它就可以工作。但是,我无法从其他地方访问返回值。 – Ivan