在C#中,我可以声明未初始化的变量,然后在类的各种方法中将其分配给它们。例如,在NUnit测试中,我可以声明一个类型化的变量,该变量仅在设置方法中初始化,然后在各种测试中重复使用。

private MyTestClass sut;

public Setup()
{
    sut = new MyTestClass();
    etc.
}

public FirstTest()
{
    sut.DoSomeWork(1);
}

public SecondTest()
{
    sut.DoSomeWork(2);
}

我想做F#中的等效项。但是,根据this和其他人的说法,未分配的“变量”在F#中并不是完成的。

对于我的F#测试,这些测试不是放在任何类型中,而只是在模块中,因此[<DefaultValue>] val无法正常工作。
使用mutable感觉并不正确,因为这似乎是F#编码人员的最后选择。

由于idomatic F#不应要求未分配的值,解决该问题的“正确”方法是什么?

最佳答案

您可以使用函数和值。无需声明未分配的变量。

let makeTestClass() =
    MyTestClass()
    // etc.

let ``First test``() =
    let sut = makeTestClass()
    sut.DoSomeWork()

let ``Second test``() =
    let sut = makeTestClass()
    sut.DoSomeWork()

09-10 00:31