Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby是否有像Groovy那样的零值安全导航操作符的语法?_Ruby_Null_Operators - Fatal编程技术网

Ruby是否有像Groovy那样的零值安全导航操作符的语法?

Ruby是否有像Groovy那样的零值安全导航操作符的语法?,ruby,null,operators,Ruby,Null,Operators,在Groovy中,有一种很好的处理空值的语法 例如,我可以执行if语句: if (obj1?.obj2?.value) { } 即使obj1为null,这也不会引发NullPointerException(它的计算结果将为false) 这是非常方便的,所以我想知道是否有一个Ruby等价物我错过了 在rails应用程序中有对象#try 所以你可以 obj1.try(:obj2).try(:value) 或者使用块(如下面评论中所述) 更新 在ruby 2.3中,有这样一个操作符: obj&a

在Groovy中,有一种很好的处理空值的语法

例如,我可以执行if语句:

if (obj1?.obj2?.value) {

}
即使obj1为null,这也不会引发NullPointerException(它的计算结果将为false)


这是非常方便的,所以我想知道是否有一个Ruby等价物我错过了

在rails应用程序中有
对象#try

所以你可以

obj1.try(:obj2).try(:value)
或者使用块(如下面评论中所述)

更新

在ruby 2.3中,有这样一个操作符:

obj&.value&.foo

这与
obj&&obj.value&&obj.value.foo

try
是Ruby 2.3之前实现这一点的唯一标准方法。使用Ruby 2.3,您可以:

if obj1&.obj2&.value

end
此外,如果您具有哈希结构,则可以将
.
运算符与以下内容一起使用:

到Ruby 2.3


语法为
obj1&.meth1&.meth2

Ruby 2.3将支持安全导航操作符:

obj1&.obj2&.value

谢谢!刚才还发现了AndandGem,它试图通过一种方法将其引入ruby:还没有稳定的版本,但是ruby的开发分支现在有了
操作符。请参阅或选择:
obj.try{| obj | obj.value}
-块模式通常在IMHO中更具视觉意义。当您想对值执行某些操作(如调用方法)时,此块语法最有意义。解决此类问题的常见模式是。请注意,它是gem的一部分,也可以在Rails之外使用。“这和"... 当
obj
false
时,这是不正确的。因此,当我回答问题时,尝试是唯一的方法。那&。符号是在Ruby 2.3中添加的。没有必要进行下一票,请发表评论或进行编辑。我不确定你的下一票是否相关,但我只是进行了编辑,因为你在if语句中使用了JavaScript语法。
require 'hashie'
myhash = Hashie::Mash.new({foo: {bar: "blah" }})

myhash.foo.bar
=> "blah"    

myhash.foo?
=> true

# use "underscore dot" for multi-level testing
myhash.foo_.bar?
=> true
myhash.foo_.huh_.what?
=> false
obj1&.obj2&.value