【问题标题】:equality and null check (Ruby-on-Rails and c#)相等和空值检查(Ruby-on-Rails 和 c#)
【发布时间】:2017-08-16 04:53:20
【问题描述】:

我在 Ruby on Rails 中使用了 ||= 运算符,我看到 C# 也有类似的东西。

Ruby on Rails 中的 ||= 是否等于 C# 中的 ??

如果有的话有什么区别?

【问题讨论】:

  • 请注意||= assigns(如果我理解正确的话)。而?? 本身没有副作用:它就像一个三元运算符。

标签: c# ruby-on-rails operators null-coalescing-operator


【解决方案1】:

根据我阅读的herex ||= y 运算符的工作方式如下:

这就是说,如果xnilfalseundefined,则x 设置为y。否则设置为x

(修改、概括、添加格式)

另一方面,null-coalescing operator ?? 的定义如下:

?? 运算符称为 null-coalescing 运算符。如果操作数不是null,它返回左侧操作数;否则返回右手操作数。

(添加格式)

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

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

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

还要注意,空合并运算符的左边部分不必是变量:on 可以写:

Foo() ?? 0

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

【讨论】:

    【解决方案2】:

    简单的答案...是和否。

    Ruby-on-Rails 中||= 运算符的目的是如果不为空,则将左侧操作数分配给自身,否则将其设置为右侧操作数。

    在 C# 中,空合并运算符 ?? 进行与 ||= 相同的检查,但它不用于分配。它的用途与a != null ? a : b 相同。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2020-02-01
      相关资源
      最近更新 更多