質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

975閲覧

rubyの配列を特殊な方法で変数に格納している件について

dialbird

総合スコア379

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/10/20 23:05

おはようございます。

rubyでアルゴリズムの勉強をしていて、ふと気になるコードを発見しました。(要約してあります)

ruby

1a = [10] 2(b,) = [10] 3p a #=>[10] 4p b #=>10

aの方はわかるんですが、bの方の仕組みが不明です。
なにやらカッコを使うと入れ子の代入ができるそうなのですが、ならばカンマはいらないのではと思い、外すとエラーになります。
この仕組みをご存知の方、ご教授願います。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

多重代入というやつですね。
Ruby 2.3.0 リファレンスマニュアル - 演算子式 - 多重代入

ruby

1(b,) = [10]

今は右辺の配列が1要素ですが、複数要素あった場合はどうなるでしょう?

ruby

1(b,) = [10, 20, 30]

ですね。この場合の ,

左辺が , で終る場合や、***** の直後の式を省略した場合にも 余った要素は無視されます。

です。

つまり、右辺の配列の要素の1番目だけ b に入れて残りは捨ててね。という意味ですよね。

さて、右辺が今は直接リテラルで [10] と書いてありますが、Arrayを返すメソッドの戻り値を使う場合はどうでしょう?

ruby

1(b, ) = something_array()

こんな感じ書きますよね?
もしくは

ruby

1b, = *something_array()

でしょうか?

ruby

1(b) = something_array()

ruby

1b = *something_array()

とはしないですよね。

直接リテラルで書いているから (b,), が余計な気がするだけだと思います。

投稿2016/10/20 23:31

hana-da

総合スコア1728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dialbird

2016/10/21 00:41

hana-daさん ご返答ありがとうございます。 とりあえず決まりみたいなものとして飲み込むしかないのですね。 丁寧に解説してくださり、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問