我刚刚研究了F#脚本,我有一个奇怪的情况,即更改变量:
let ParseActual (arg:string) = let mutable value = false
if arg.[1] = '-' then value <- false
else value <- true
if arg.[1] = '-' || arg.[1] = '+' then ref arg := arg.Remove(0,2)
else (
Console.WriteLine(arg)
ref arg := arg.Remove(0,1)
Console.WriteLine(arg)
)
AddActual(arg, value)
但它不会改变字符串。第一个输出\r
,第二个输出\r
。从字符串中删除一些字符并为其分配新值有什么问题?
答案 0 :(得分:1)
arg
字符串是不可变的。你可以做的是使用字符串来创建和返回一个改变了文字的新字符串,但你将无法改变现有的字符串。
F#中的所有变量(不是最幸运的单词)就是这种情况,一旦它们被创建并绑定到一个它们无法更改的值(除非你明确使用mutable
关键字,就像你做的那样bool value
)。