stanza_class.new(node.attributes if node.attributes)
メソッドでnilになる可能性のある変数を渡しています。ルビーでこれを行う美しい方法はありますか?
stanza_class.new(node.attributes if node.attributes)
メソッドでnilになる可能性のある変数を渡しています。ルビーでこれを行う美しい方法はありますか?
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に設定されます。
stanza_class.new(*node.attributes)
node
である可能性があると仮定しますnil
。それは完全に慣用的です:
stanza_class.new(node.attributes if node)
Ickに慣れているプログラマーはおそらく次のように書くでしょう:
stanza_class.new(node.maybe.attributes)