stanza_class.new(node.attributes if node.attributes)
我传递的方法中的变量可能为零。 在红宝石中有这种漂亮的方式吗?
答案 0 :(得分:0)
如果您使用的是Ruby on Rails,则可以使用try方法:
例如
node.try(:attributes)
这意味着如果node
为nil
,则会在NilClass上返回nil
而不是遗漏方法。
参考: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
如果你的意思是节点永远不是nil,但node.attributes可能是nil,那么你可以这样做:
stanza_class.new(node.attributes)
这是因为
stanza_class.new(nil)
相当于
stanza_class.new()
也就是说,默认情况下,未传递的参数设置为nil。
答案 1 :(得分:0)
我假设它是node
,可能是nil
。这完全是惯用的:
stanza_class.new(node.attributes if node)
虽然习惯于Ick的程序员可能会写:
stanza_class.new(node.maybe.attributes)
答案 2 :(得分:0)
stanza_class.new(*node.attributes)