如果 C# 允许 ??= 运算符,那就太好了。我发现自己经常写以下内容:
something = something ?? new Something();
我宁愿这样写:
something ??= new Something();
想法?新的语言扩展总是因其性质而引起争议。
如果 C# 允许 ??= 运算符,那就太好了。我发现自己经常写以下内容:
something = something ?? new Something();
我宁愿这样写:
something ??= new Something();
想法?新的语言扩展总是因其性质而引起争议。
其他编程语言,如 Ruby,经常使用它:
something ||= Something.new
如果“某物”是属性访问器的私有字段,您可以执行以下操作....如果发现该字段为空,这将执行分配。
private Something something;
public Something Something
{
get
{
return something ?? (something = new Something());
}
}
我不一定反对操作员,但是,这种变量重用对我来说并不是“正确的方式”。应该是明显的 NULL 指针的错误最终会填充意外的数据并以某种意外的方式工作,等等......
我实际上是为 PHP7 实现的。它现在处于 RFC 提案阶段。 https://github.com/php/php-src/pull/1795
实际上这是一个关于 PHP7 中空合并运算符的问题。检查这个:
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? ‘value’;
I want to check if some var is null and if the same var is null set the same var to ‘value’.
因此,我在等号运算符之后重复相同的变量,这感觉不对。
所以我觉得我们需要另一个像“??=”这样的运算符,类似于+=;
$this->request->data['comments']['user_id'] ??= 'value'。因此,如果 var 为 null,则将其设置为“value”,否则保持不变。
在那个拉取请求中,我试图实现这一点。
$ sapi/cli/php -r '$num = null;$num ??= 5; echo $num;'
5
我会说??
操作员,更确切地说,上述模式并不常见,因此新的操作员太过分了。
以??
类似于以下方式使用三元运算符的简写:
(myObject != null) ? myObject : somethingElse;
而不是算术运算的简写,我认为??=
运算不适合。它是一个条件运算符。
老实说,我首先对 =++ 运算符感到厌烦,它的用法相当普遍和普遍。从清晰的角度来看,您需要输入的额外几个字符可能不值得更改语言以添加 ??=。如果这是投票,我会投票反对更改语言(好问题,坏主意。:-)
我还没有尝试过,但是您可以将 ??= 映射到 Visual Studio 中刚刚为您重写的宏吗?