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

メソッドでnilになる可能性のある変数を渡しています。ルビーでこれを行う美しい方法はありますか?

4

3 に答える 3

0

Ruby on Railsを使用している場合は、tryメソッドを使用できます。

例えば。

node.try(:attributes)

これは、がの場合node、NilClassのメソッドが欠落している代わりにnil返されることを意味します。nil

参照:http ://api.rubyonrails.org/classes/Object.html#method-i-try

レールを使用していない場合は、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 に答える
0

nodeである可能性があると仮定しますnil。それは完全に慣用的です:

stanza_class.new(node.attributes if node)

Ickに慣れているプログラマーはおそらく次のように書くでしょう:

stanza_class.new(node.maybe.attributes)
于 2012-09-02T08:12:47.187 に答える