我在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/