stanza_class.new(node.attributes if node.attributes)
我正在传递一个方法中可能为 nil 的变量。在 ruby 中有没有一种漂亮的方法可以做到这一点?
stanza_class.new(node.attributes if node.attributes)
我正在传递一个方法中可能为 nil 的变量。在 ruby 中有没有一种漂亮的方法可以做到这一点?
我会假设它node
可能是nil
。这是完全地道的:
stanza_class.new(node.attributes if node)
尽管习惯于Ick的程序员可能会这样写:
stanza_class.new(node.maybe.attributes)
如果你使用的是 Ruby on Rails,你可以使用 try 方法:
例如。
node.try(:attributes)
这意味着 if node
is nil
,它返回nil
而不是 NilClass 上的缺失方法。
参考:http ://api.rubyonrails.org/classes/Object.html#method-i-try
如果你不使用 rails,你可以自己修改 Object 类。猴子修补 Rails 的源代码(在参考 URL 中找到)是:
class Object
def try(*a, &b)
if a.empty? && block_given?
yield self
else
__send__(*a, &b)
end
end
end
如果您的意思是 node 永远不会是 nil,但 node.attributes 可能是 nil,那么您可以这样做:
stanza_class.new(node.attributes)
这是因为
stanza_class.new(nil)
相当于
stanza_class.new()
也就是说,未传递的参数默认设置为 nil。
stanza_class.new(*node.attributes)