我想在F#中指出'风险'部分。请考虑以下代码
let mutable a, b as ab = 0, 0
a <- 4
a
ab
您将获得a = 4
和ab = 0, 0
。这可能是一种正确的行为,我只想指出并了解你的意见。你觉得这种行为是否合乎逻辑,为什么?我有一些问题需要接受,因为我一直认为(a,b)和ab应该是相同的。
答案 0 :(得分:5)
如果您在F#interactive中运行let mutable a, b as ab = 0, 0
,您将获得:
val mutable ab : int * int = (0, 0)
val mutable b : int = 0
val mutable a : int = 0
表达式创建了3个不同且独立的值。修改一个值不会影响其他值
答案 1 :(得分:4)
事实上,这可能会让人感到困惑,但是一旦你理解了F#如何处理声明(正如Ankur所解释的那样),它应该是有道理的。
如果使用引用单元格而不是mutable
变量,则可以获得其他行为(修改一个值也会修改元组):
let a, b as ab = ref 0, ref 0
a := 4
!(fst ab) // returns 4