Tom*_*cek 23
当你使用可变值或者使用可变参考单元(本质上是一个存储可变值的简单对象)时,与C++中相同意义上的"递增值"的想法才有意义.如果你有一个可变的引用单元格,你可以使用incr
函数:
let count = ref 0
incr count
Run Code Online (Sandbox Code Playgroud)
如果你使用一个可变变量,那么没有内置函数,你需要写count + 1
:
let mutable count = 0
count <- count + 1
Run Code Online (Sandbox Code Playgroud)
如果您使用不可变值编写代码,那么您通常只需编写count + 1
然后将结果传递给某个函数(或其他地方 - 这取决于具体情况).例如,要计算F#列表的长度,您可以编写:
let rec length list =
match list with
| [] -> 0
| _::tail -> 1 + (length tail)
Run Code Online (Sandbox Code Playgroud)
在此示例中,表达式1 + (...)
是对应i++
于C++代码的代码,该代码迭代列表并计算其长度.表达式的结果未分配给新变量,因为它是作为length
函数的结果直接返回的.
编辑函数的参数是不可变的,这意味着您无法更改其值.正如Lee所提到的,您可以使用变量阴影来隐藏旧值 - 但请注意,这只会产生局部效果(就像定义一个具有不同名称的新变量来存储新值).例如:
let rec length list count =
match list with
| [] -> count
| _::tail ->
let count = count + 1 // Variable shadowing used here
length tail count
Run Code Online (Sandbox Code Playgroud)
你不能编写一个函数来简化这一行let count = count + 1
,如上所述,这相当于写入let newCount = count + 1
然后newCount
在最后一行使用.
小智 5
您无法模拟后增量运算符,但可以进行预增量
let inline (+=) (x : byref<_>) y = x <- x + y
let mutable a = 0
&a += 1
Run Code Online (Sandbox Code Playgroud)
要么
let inline incv (x : byref<_>) = x <- x + LanguagePrimitives.GenericOne; x
let mutable b = 0
incv &b
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8596 次 |
最近记录: |