声明变量而不分配

coo*_*kya 7 f#

有没有在F#中声明一个新变量而不给它赋值的方法?

Ram*_*nir 16

见艾丹的评论.

如果你坚持,你可以这样做:

let mutable x = Unchecked.defaultof<int>
Run Code Online (Sandbox Code Playgroud)

这将分配绝对零值(0对于数字类型,null对于引用类型,对于值类型,struct-zero).


Dan*_*iel 7

您还可以使用显式字段语法:

type T =
  val mutable x : int
Run Code Online (Sandbox Code Playgroud)


Ed'*_*'ka 7

有趣的是要知道为什么作者需要在F#中使用它(预期用途的简单例子就足够了).

但我想,当你在普通情况下,一个可以使用未初始化的变量在C#中,当你调用一个函数out的参数:

TResult Foo<TKey, TResult>(IDictionary<TKey, TResult> dictionary, TKey key)
{
    TResult value;
    if (dictionary.TryGetValue(key, out value))
    {
        return value;
    }
    else
    {
        throw new ApplicationException("Not found");
    }
}
Run Code Online (Sandbox Code Playgroud)

幸运的是在F#中你可以使用更好的语法来处理这种情况:

let foo (dict : IDictionary<_,_>) key = 
    match dict.TryGetValue(key) with
    | (true, value) -> value
    | (false, _) -> raise <| ApplicationException("Not Found")
Run Code Online (Sandbox Code Playgroud)