F# 在 for 循环中为数组赋值
F# assigning values to arrays in a for loop
我想做的就是将骰子值分配到数组中,但这些值并没有改变
let diceRoll () =
let random = new System.Random()
for i = 0 to 4 do
let r = random.Next(1,6)
let b = r
printf " Dice %u = %i |" i r
let diceValue = [|1;2;3;4;5|]
let assign = diceValue.[i] = r
printfn "%u" assign
F# 中的赋值运算符是 <-
而不是 =
。
在你的代码中你有:
let assign = diceValue.[i] = r
这是一个相等性测试,它检查值 diceValue.[i]
是否等于 r
。结果是您分配给变量 assign
.
的布尔值
如果你想改变数组,你可以使用:
diceValue.[i] <- r
我不确定您希望使用 assign
变量做什么。赋值操作returnsunit
,有点像其他语言的void
,所以你没有得到任何有用的结果。
如果你想改变数组中的所有值,那么你还需要在循环外定义数组:
let random = new System.Random()
let diceValue = [|1;2;3;4;5|]
for i = 0 to 4 do
let r = random.Next(1,6)
diceValue.[i] <- r
附带说明一下,使用 Array.init
函数可以更好地完成此操作,该函数初始化数组并调用提供的函数来获取数组中每个元素的值:
let diceValue = Array.init 5 (fun _ ->
random.Next(1,6))
我想做的就是将骰子值分配到数组中,但这些值并没有改变
let diceRoll () =
let random = new System.Random()
for i = 0 to 4 do
let r = random.Next(1,6)
let b = r
printf " Dice %u = %i |" i r
let diceValue = [|1;2;3;4;5|]
let assign = diceValue.[i] = r
printfn "%u" assign
F# 中的赋值运算符是 <-
而不是 =
。
在你的代码中你有:
let assign = diceValue.[i] = r
这是一个相等性测试,它检查值 diceValue.[i]
是否等于 r
。结果是您分配给变量 assign
.
如果你想改变数组,你可以使用:
diceValue.[i] <- r
我不确定您希望使用 assign
变量做什么。赋值操作returnsunit
,有点像其他语言的void
,所以你没有得到任何有用的结果。
如果你想改变数组中的所有值,那么你还需要在循环外定义数组:
let random = new System.Random()
let diceValue = [|1;2;3;4;5|]
for i = 0 to 4 do
let r = random.Next(1,6)
diceValue.[i] <- r
附带说明一下,使用 Array.init
函数可以更好地完成此操作,该函数初始化数组并调用提供的函数来获取数组中每个元素的值:
let diceValue = Array.init 5 (fun _ ->
random.Next(1,6))