Ruby 内で、メソッド呼び出しを介して配列から返された共通の値を複数の変数 (すべてではない) に割り当てるための、洗練された 1 行のステートメントを探してきました。
目的の核心は、次のような 2 行のステートメントを変換することです。
a, x = 1, 2
y = x
Into:a, x, y = 1, 2, 2
繰り返される値をハードコーディングせずに。したがってa
、1 つの値 (1) を取得しx
、y
両方が共通の値 (2) を共有します。
例をユースケースに拡張するために、値を直接割り当てる代わりに1, 2
、メソッド呼び出しから返された配列を介して値を割り当てます。
a, x = 7.divmod 5 # array [1,2] is unpacked via parallel assignment
y = x
これは最初のコード サンプルと同じ結果になり、整数を変数に置き換えて割り当てを動的にすることができます。
この割り当てを 1 つの行にまとめる方法をお勧めできますか? これまでに検討したいくつかのオプションを次に示します。
n = 7 # number
m = 5 # divided by
# Option 1) Store array via inline-variable assignment and append last
# element to align values for the parallel assignment
a, x, y = (t = n.divmod(m)) << t[-1]
# Option 2) Use Array#values_at to repeat some elements
a, x, y = n.divmod(m).values_at 0,1,1
並列割り当てを初めて使用する場合は、この SO 投稿で標準的な使用方法について説明します。