作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 F# 中的变量默认是不可变的。
但是,例如在 F# 交互中:
> let x = 4;;
val x : int = 4
> let x = 5;;
val x : int = 5
> x;;
val it : int = 5
>
最佳答案
当你写 let x = 3
,您正在绑定(bind)标识符 x
到值 3
.如果您在同一范围内再次执行此操作,则您声明了一个新标识符,该标识符隐藏了前一个标识符,因为它具有相同的名称。
在 F# 中改变一个值是通过破坏性更新运算符 <-
完成的。 .对于不可变的值,这将失败,即:
> let x = 3;;
val x : int = 3
> x <- 5;;
x <- 5;;
^^^^^^
stdin(2,1): error FS0027: This value is not mutable
mutable
在
let
之后:
let mutable x = 5;;
val mutable x : int = 5
> x <- 6;;
val it : unit = ()
> x;;
val it : int = 6
let i = 0;
while i < 10 do
let i = i + 1
()
i
在循环内声明的是不同的
i
隐藏外部的。外层是不可变的,所以它总是保持它的值
0
并且循环永远不会结束。正确的写法是使用可变变量:
let mutable i = 0;
while i < 10 do
i <- i + 1
()
关于f# - 在 F# 中不可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11157358/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!