我在C#中有此列表:

List<string> words = new List<string> { "how", "are", "you" };

我可以使用以下命令轻松打印列表的内容:
foreach(string word in words)
   Debug.WriteLine(word);

现在我想在F#中做同样的事情(我从here上了解到List<T>与ResizeArray类似):

let words = ResizeArray<string>()
words.Add("how")
words.Add("are")
words.Add("you")

for word in words do
    Debug.WriteLine(sprintf "%s" word)

现在的问题是,在for循环中word变为空。我在这里做错了什么?

编辑:
这是完整的代码。我已经按照建议将其更改为printf。不幸的是,在for循环中时,我仍然一无所获:

let myFunction =
    let words = ResizeArray<string>()
    words.Add("how")
    words.Add("are")
    words.Add("you")

    for word in words do
        printf "%s" word // <-- word becomes null
    words

[<EntryPoint>]
let main argv =
    ignore myFunction
    0 // return an integer exit code

最佳答案

我怀疑这是由于F#的惰性评估性质所致。因此,word直到被printf语句使用才真正分配,因此您无法在调试器中看到该值。

如果在循环中添加另一个语句并在其中设置断点,则将看到word的分配值的值。请参见下面的代码段-

let myFunction =
let words = ResizeArray<string>()
words.Add("how")
words.Add("are")
words.Add("you")

for word in words do
    printf "%s" word //
    printf "%s" word // <-- SET A BREAKPOINT HERE AND VERIFY THE VALUE OF 'word'

words

关于c# - 为什么我不能在F#中打印此数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30280561/

10-11 15:59