我读过那些较旧的主题:
但是,如果将其与 F# 类似物进行比较,我无法理解 immutable
这个词的含义:
open System
let data = "London"
data <- "123"
Console.WriteLine data
由于下一个原因,这个不会编译:
error FS0027: This value is not mutable. Consider using the mutable keyword, e.g. 'let mutable data = expression'.
所以...如果将 F# 的行为与 C# 的行为进行比较,似乎 F# 具有不可变性的真正含义,或者我不理解该术语的真正含义...
让我们看看 C# 变体:
class Program
{
static void Main()
{
var a = "London";
a = "123";
System.Console.WriteLine(a);
}
}
输出将是:123
。
让我们从下一篇文章中获取信息:Why are the strings immutable in .NET?
老实说,如果看这张图片并将其与 F# 变体进行比较,我看不出不变性......但是,据我所知,SO 上有超过 100 多人(问题发布在这个问题)不会错,也不会为这样的意思起错名字。
请告诉我,为什么 C# 字符串一直被称为 immutable
,如果我可以更改它的值?而如果将其与F#示例进行比较,结果就单义而言是不同的。
最佳答案
您混淆了 F# 中变量的不可变性和 C# 中对象的不可变性。
在 C# 中,您可以更改表示变量指向的字符串的对象。但是您无法更改该对象的任何内容,因此该对象是不可变的。
在 F# 中,您无法更改变量的值,因此变量也是不可变的。
关于c# - 如果与 F# 类似物进行比较,为什么 C# 字符串的标题为 "Immutable"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48231010/