0

可能重复:
是否有一种干净的方法可以避免在嵌套的参数哈希中调用 nil 上的方法?
ruby 中 groovy 的链式属性是否有等效的 null 预防措施?

在 Ruby 中是否有任何语法糖可以帮助避免“nil:NilClass 的未定义方法‘xx’”而不写这个?

if !something.nil? && !something.very.nil? && !something.very.long.nil? && !something.very.long.to.nil? then
   if something.very.long.to.write != 0 then
    ...
   end
end

在 Groovy 中我会这样做

if(something?.very?.loong?.to?.write != 0)

Ruby 是否有等效的语法?

4

2 回答 2

1

这是一个重复的问题,但我暂时找不到。我的方法是:

if a = something and a = a.very and a = a.long and a = a.to
  if a = a.write
    ...
  end
end
于 2012-06-27T10:31:58.793 回答
0
class Object
  def try(*a, &b)
    if a.empty? && block_given?
      yield self
    else
      __send__(*a, &b)
    end
  end
end

class NillClass
  def try(*args)
    nil
  end
end

那么在你的情况下

if result = something.try(:very).try(:long).try(:to).try(:write)
  if result != 0
  end
end 
于 2012-06-27T10:34:05.060 回答