15

私は次のものを持っています:

foo ||= []
foo << "bar"

そして、これは1行で実行できると確信していますが、方法がわかりません。

重要なのは、foo が存在する場合と存在しない場合があることです。存在する場合は常に配列です。存在しない場合は、配列になり、変数を追加する必要があります。

4

3 に答える 3

49

このような:

(foo ||= []) << "bar"

括弧で囲まれたビットはfoo、すでに存在する場合は返され、存在しない場合は作成さ<<れてから追加されます。

于 2011-03-09T16:01:15.157 に答える
4

が定義されていない場合にのみ追加する"bar"場合:foo

foo ||= ["bar"]

すでに存在する"bar"かどうかに関係なく追加する場合:foo

(defined? foo) ? foo << "bar" : foo = ["bar"]

ただし、後者の場合は、個人的には元のコードの書き方の方が好きです。確かに 1 行で実行できますが、2 行の実装の方が読みやすいと思います。

于 2011-03-09T14:57:58.387 に答える
2

ローカル変数が存在するかどうかわからない場合、どのコードを書いていますか?

それが何かのようなものなら

def procedural_method(array)
  result ||= []
  array.each do |array_item|
    result << bar(array_item)
  end
  result
end

次に、より機能的なプログラミングアプローチを試すことができます

def functional_programming_method(array)
  array.map do |array_item|
    bar(array_item)
  end
end
于 2011-03-09T22:36:30.290 に答える