【发布时间】:2017-03-21 00:14:35
【问题描述】:
我可以在 Scala 中编写(这与在 C# 中的含义完全相同)
var v = 1;
v = 2;
但不会写(好吧,虽然语法正确,但我当然会写但实际上无法编译)
val v = 1;
v = 2;
分号不是必需的,但可以在 Scala 中自愿使用,因此我决定包含它们以使代码更紧密地对应 C#。 val 表示一个不可变的值,一种只能赋值一次的变量,但不太可能 c# consts 可以用运行时表达式的结果初始化,不太可能 C# readonly 字段可以在代码中的任何位置引入 var 变量,并且不太可能 C# 不可变类型不受引用替换的影响,而不仅仅是对引用对象的修改。
我喜欢 C# 在每个新版本的语言中引入越来越多的函数式编码糖果的方式,但我非常想念这个(可以说是最简单和最重要的)一个。在大多数情况下,我只为我的变量赋值一次,因此重新赋值通常是不应该发生的事情,这意味着事情不是预期的并且可能以这种方式导致错误。我可能只是不知道这样的功能吗?我不介意这样的声明看起来有点笨拙(可能是一些 F# 导入,无论它们在 C# 代码中看起来如何)。
更新:目前看来确实没有这样的功能(2017 年 3 月,C# 语言版本 7.0),并且按照其他人的建议,我已经提交了 issue at the C# language design GitHub repository。
【问题讨论】:
标签: c# .net syntax immutability