【发布时间】:2014-07-27 15:08:26
【问题描述】:
运行以下代码的结果返回一个空列表,但我不太清楚为什么。 我的猜测是,在 for 循环上迭代有一个我还不明白的效果,我知道如果我将结果列表更改为可变的,一切正常 请注意,fileNames 和 games 之间没有关系(即可以有任意数量的游戏或文件,它们不需要一对一匹配)
let createList (fileNames: string list) =
let games = [ "DMC";"Aztez"]
let result = List.empty<(string * string)>
for filename in fileNames do
for game in games do
let a = [filename, game]
result = result @ a
result
在两个 for 循环内的行中有一个警告:“这个表达式应该有 'unit' 类型,但有 'bool' 类型。使用 'ignore' 丢弃表达式的结果,或者使用 'let'将结果绑定到名称。"
下面的代码具有预期的行为
let createListM (fileNames: string list) =
let games = [ "DMC";"Aztez"]
let mutable result = List.empty<(string * string)>
for filename in fileNames do
for game in games do
let a = [filename, game]
result <- result @ a
result
但如果我不必使用可变列表会更好。
总而言之,我想知道 a)为什么在第一个代码示例中结果为空。为什么新值没有附加@(我也尝试过 :: ) b) 有没有更好的方法来做到这一点?
谢谢
【问题讨论】: