相等性和空值检查(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.

相同

根据我阅读的内容 herex ||= 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.

(已添加格式)

基于此有两个重要的区别:

  1. ??不赋值,就好像一个三元运算符。结果 可以 赋值,但可以用它做其他事情:例如将它赋值给 另一个 变量,或者调用它的方法;和
  2. ?? 只检查 null(例如 不检查 false ), 而 ||= 适用于 nil, falseundefined.

但我同意他们有一些“相似的目的”虽然 Ruby 中的 || 可能与 ?? 更相似,但它仍然违反 (2).

另外请注意,空合并运算符的左侧部分不必是变量:可以写成:

Foo() ?? 0

所以这里我们调用一个Foo方法。