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

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

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

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

Q&A

解決済

4回答

1174閲覧

これの意味が知りたい hogehoge3 = hogehoge1 = hogehoge2

ruby_nyumon

総合スコア93

Ruby

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

0グッド

1クリップ

投稿2016/05/20 04:24

hogehoge3 = hogehoge1 = hogehoge2

これの意味が知りたいです。

hogehoge1 = 1
hogehoge2 = 2

とすると、hohoge3もhogehoge1も2になりました。

が、単純にそれだけでしょうか?

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

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

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

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

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

guest

回答4

0

hogehoge3 = hogehoge1 = hogehoge2

hogehoge1 = hogehoge2
hogehoge3 = hogehoge1
としたのと同じですね。
hogehoge3 = hogehoge1 = hogehoge2
を具体的に分解すると
左辺は hogehoge3
右辺は hogehoge1 = hogehoge2
なので hogehoge3 には hogehoge1 = hogehoge2 の結果が代入されます。
hogehoge1 = hogehoge2
は左辺がhogehoge1で右辺がhogehoge2ですがこれはお分かりの通り単なる代入でhogehoge2の値がhogehoge1に代入されます。
hogehoge1 = hogehoge2の結果(の値)とは何か?…といえばhogehoge1の値ですが元々のhogehoge1の値ではなく代入実施後のhogehoge1の値の事なのでhogehoge1に代入したhogehoge2の値という事で元々で言えばhogehoge2の値です。
なのでhogehoge3に代入されるhogehoge1 = hogehoge2の式の結果とはつまりhogehoge1に代入されたhogehoge2の値となるのでhogehoge3に代入されるのは結果的にはhogehoge2の値だった、と解釈すれば少しは分かりやすくないでしょうか。

投稿2016/05/20 05:05

HiroshiWatanabe

総合スコア2160

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

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

ruby_nyumon

2016/06/03 09:35

ありがとうございます!
guest

0

a = b = c

a = b
a = c

となります.

また,これらすべて同一のobject_idになるので,

[21] pry(main)> c = {hoge: 'a'} => {:hoge=>"a"} [22] pry(main)> a = b =c => {:hoge=>"a"} [23] pry(main)> c[:hoge] = 'd' => "d" [24] pry(main)> a => {:hoge=>"d"} [25] pry(main)> b => {:hoge=>"d"} [26] pry(main)> c => {:hoge=>"d"}

となります.ただし文字列の場合は少し特殊で

rb

1[28] pry(main)> a = 'a' 2=> "a" 3[29] pry(main)> b = 'b' 4=> "b" 5[30] pry(main)> c = 'c' 6=> "c" 7[31] pry(main)> a = b = c 8=> "c" 9[32] pry(main)> a 10=> "c" 11[33] pry(main)> b 12=> "c" 13[34] pry(main)> c 14=> "c" 15[35] pry(main)> c = 'd' 16=> "d" 17[36] pry(main)> a 18=> "c" 19[37] pry(main)> b 20=> "c" 21[38] pry(main)> c 22=> "d"

となります.

これは c の参照が, 新しい'd' のインスタンス に変わるからです.
文字列,数字,実数,boolean, nil はこういった振る舞いになります.

投稿2016/05/20 04:37

編集2016/05/20 04:39
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ruby_nyumon

2016/06/03 09:35

ありがとうございます!
guest

0

ベストアンサー

Rubyのマニュアルにはちゃんと書いてないですが、Rubyを含む多くの言語で代入は右結合と言って、代入が並んでいる場合は右から順にに実行します。
hogehoge3 = hogehoge1 = hogehoge2
は、
hogehoge3 = ( hogehoge1 = hogehoge2 )
ということです。
つまり、hogehoge1 = hogehoge2という式を評価してその結果をhogehoge3に代入します。
これもマニュアルにはちゃんと書いてないですが、Rubyを含む多くの言語で代入の結果というのは右辺の値(この場合はhogehoge2の値)そのままです。
つまり、hogehoge3 = hogehoge2の値と同じです。

なお、hogehoge2は最初のhogehoge1への代入時に一度だけ評価されます。
そのため、hogehoge2hogehoge2の値を区別して表現しています。

投稿2016/05/20 15:03

otn

総合スコア84557

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

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

ruby_nyumon

2016/06/03 09:36

ありがとうございます!
guest

0

「朱に交われば赤くなる」というか、「hogehoge3」も「hogehoge1」もそのままで居れば良いのに、「右ならえ」して、正に日本人的発想と言うか、買い物の列に並んじゃうんですね。なにも、そのままで居れば良いのに。右ならえしてしまうのが数学の世界で、右と左が同じくなっちゃうんですよ。
AはB、BはC、よってAはC。等号では無く「たぶん、同じだよなー」ならAとCは同じくなんないんでしょうが。
A≒B≒C の場合、AとCは同じかもしんないし、違うかもしんない。色で言えば3色とも赤系なんです。Cが青系の場合、A≒B≠Cと書くと思います。そうなれば、AとCは違う色です。

3つとも紫にするのは、あなーた、あなたさまなのです(無理無理)

投稿2016/05/20 06:53

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ruby_nyumon

2016/06/03 09:36

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問