相等性和空值检查(Ruby-on-Rails 和 c#)
equality and null check (Ruby-on-Rails and c#)
我在 Rails 上的 Ruby 中使用 ||=
运算符,我看到 C# 有类似的东西。
Rails 上 Ruby 中的 ||=
是否等于 C# 中的 ??
?
有的话有什么区别?
简单的回答...是和否。
Ruby-on-Rails 中的 ||=
运算符的目的是将左侧操作数分配给自身(如果不为空),否则将其设置为右侧操作数。
在 C# 中,空合并运算符 ??
进行与 ||=
相同的检查,但它不用于分配。它的作用与 a != null ? a : b
.
相同
根据我阅读的内容 here,x ||= y
运算符的工作方式如下:
This is saying, set x
to y
if x
is nil
, false
, or undefined
. Otherwise set it to x
.
(修改、通用化、添加格式)
另一方面,null-coalescing operator ??
的定义如下:
The ??
operator is called the null-coalescing operator. It returns the left-hand operand if the operand is not null
; otherwise it returns the right hand operand.
(已添加格式)
基于此有两个重要的区别:
??
不赋值,就好像一个三元运算符。结果 可以 赋值,但可以用它做其他事情:例如将它赋值给 另一个 变量,或者调用它的方法;和
??
只检查 null
(例如 不检查 false
), 而 ||=
适用于 nil
, false
和 undefined
.
但我同意他们有一些“相似的目的”虽然 Ruby 中的 ||
可能与 ??
更相似,但它仍然违反 (2).
另外请注意,空合并运算符的左侧部分不必是变量:可以写成:
Foo() ?? 0
所以这里我们调用一个Foo
方法。
我在 Rails 上的 Ruby 中使用 ||=
运算符,我看到 C# 有类似的东西。
Rails 上 Ruby 中的 ||=
是否等于 C# 中的 ??
?
有的话有什么区别?
简单的回答...是和否。
Ruby-on-Rails 中的 ||=
运算符的目的是将左侧操作数分配给自身(如果不为空),否则将其设置为右侧操作数。
在 C# 中,空合并运算符 ??
进行与 ||=
相同的检查,但它不用于分配。它的作用与 a != null ? a : b
.
根据我阅读的内容 here,x ||= y
运算符的工作方式如下:
This is saying, set
x
toy
ifx
isnil
,false
, orundefined
. Otherwise set it tox
.
(修改、通用化、添加格式)
另一方面,null-coalescing operator ??
的定义如下:
The
??
operator is called the null-coalescing operator. It returns the left-hand operand if the operand is notnull
; otherwise it returns the right hand operand.
(已添加格式)
基于此有两个重要的区别:
??
不赋值,就好像一个三元运算符。结果 可以 赋值,但可以用它做其他事情:例如将它赋值给 另一个 变量,或者调用它的方法;和??
只检查null
(例如 不检查false
), 而||=
适用于nil
,false
和undefined
.
但我同意他们有一些“相似的目的”虽然 Ruby 中的 ||
可能与 ??
更相似,但它仍然违反 (2).
另外请注意,空合并运算符的左侧部分不必是变量:可以写成:
Foo() ?? 0
所以这里我们调用一个Foo
方法。