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

我正在传递一个方法中可能为 nil 的变量。在 ruby​​ 中有没有一种漂亮的方法可以做到这一点?

4

3 回答 3

0

我会假设它node可能是nil。这是完全地道的:

stanza_class.new(node.attributes if node)

尽管习惯于Ick的程序员可能会这样写:

stanza_class.new(node.maybe.attributes)
于 2012-09-02T08:12:47.187 回答
0

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

例如。

node.try(:attributes)

这意味着 if nodeis 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。

于 2012-09-02T04:25:26.173 回答
0
stanza_class.new(*node.attributes)
于 2012-09-02T15:46:15.533 回答