Ruby传递属性可能为零

时间:2012-09-02 04:23:33

标签: ruby

stanza_class.new(node.attributes if node.attributes)

我传递的方法中的变量可能为零。 在红宝石中有这种漂亮的方式吗?

3 个答案:

答案 0 :(得分:0)

如果您使用的是Ruby on Rails,则可以使用try方法:

例如

node.try(:attributes)

这意味着如果nodenil,则会在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)