a1
3 つの新しい配列 ( 、a2
、 )を宣言する場合はa3
、次のようにします。
a1=[]
a2=[]
a3=[]
しかし今、私はすべてを1行でやりたいのです。
a1, a2, a3 = []
しかし、これは失敗します。それらすべてを1行の空の配列に割り当てるにはどうすればよいですか?
a1
3 つの新しい配列 ( 、a2
、 )を宣言する場合はa3
、次のようにします。
a1=[]
a2=[]
a3=[]
しかし今、私はすべてを1行でやりたいのです。
a1, a2, a3 = []
しかし、これは失敗します。それらすべてを1行の空の配列に割り当てるにはどうすればよいですか?
2 番目の例と同様のことを行うには、3 つの配列を作成する必要があります。
a1, a2, a3 = [], [], []
[]
リテラルを繰り返さないことを主張する場合、1つの方法は次のとおりです。
a1, a2, a3 = Array.new(3){[]}
別の方法は次のとおりです。
a1 = (a2 = (a3 = []).dup).dup
Andrew Marshall が指摘したように、 1 つの値を複数のオブジェクトに割り当てるさらに短い方法がもう1 つあります。
a1, a2, a3 = [42] * 3
以下の状況では、Ruby の複数代入は想定外です。
a1, a2, a3 = []
上記のコードは、配列変数に空の配列を割り当てません。
使用する、
a1, a2, a3 = [], [], []
初期化に使用される変数の数として、値の数を指定する必要があります。
これらの回答は過剰に設計されてArray
おり、OP のサンプルでの誤解を招くような使用に焦点を当てています。
a1 = a2 = a3 = []
# => []
結果をテストする
a1
# => []
a2
# => []
a3
# => []
a4 # for sake of comparison
NameError: undefined local variable or method `a4' for main:Object
次のこともできます。
a1=[]; a2=[]; a3=[]