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))