F#脚本在函数中更改参数

时间:2014-12-09 19:12:05

标签: f#-interactive

我刚刚研究了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。从字符串中删除一些字符并为其分配新值有什么问题?

1 个答案:

答案 0 :(得分:1)

arg字符串是不可变的。你可以做的是使用字符串来创建和返回一个改变了文字的新字符串,但你将无法改变现有的字符串。 F#中的所有变量(不是最幸运的单词)就是这种情况,一旦它们被创建并绑定到一个它们无法更改的值(除非你明确使用mutable关键字,就像你做的那样bool value)。