我总是遇到这个Ruby问题,我想写得更干净.
var a can be nil
a.value can also be nil
a.value has possible true or false value
if (not a.nil?) && (not a.value.nil?) && a.value == false
puts "a value is not available"
else
puts "a value is true"
end
Run Code Online (Sandbox Code Playgroud)
问题是条件语句太笨拙而且难以阅读.如何改进检查nil和false条件声明?
谢谢,我是一个Ruby新手
nat*_*vda 15
Ruby on rails有一个名为的扩展名try,允许你编写:
if a.try(:value) == false
Run Code Online (Sandbox Code Playgroud)
这很干净.没有try,你可以写
if a && a.value == false
Run Code Online (Sandbox Code Playgroud)
如果a.value是nil,那不是假的,所以没关系:)
如果有可能a.value没有定义(会引发异常),我会写如下:
if a && a.respond_to?(:value) && a.value == false
Run Code Online (Sandbox Code Playgroud)
[更新:红宝石2.3之后]
从ruby 2.3开始,版本更短:
if a&.value == false
Run Code Online (Sandbox Code Playgroud)
这几乎等同于a.try(:value)(但纯粹的红宝石).区别:
value不存在,&.操作员将抛出,try将返回nil(优选与否?)(注意:try!也会抛出).try或&.他们也处理false不同.这遵循以前的差异逻辑,try将返回nil,而&.将抛出因为false没有方法:P 小智 7
您可以使用安全导航操作符(&.)以更紧凑的方式实现它:
if a&.value == false
资料来源:http://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/
| 归档时间: |
|
| 查看次数: |
26383 次 |
| 最近记录: |