hogehoge3 = hogehoge1 = hogehoge2
これの意味が知りたいです。
hogehoge1 = 1
hogehoge2 = 2
とすると、hohoge3もhogehoge1も2になりました。
が、単純にそれだけでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア2160
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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
Rubyのマニュアルにはちゃんと書いてないですが、Rubyを含む多くの言語で代入は右結合と言って、代入が並んでいる場合は右から順にに実行します。
hogehoge3 = hogehoge1 = hogehoge2
は、
hogehoge3 = ( hogehoge1 = hogehoge2 )
ということです。
つまり、hogehoge1 = hogehoge2
という式を評価してその結果をhogehoge3
に代入します。
これもマニュアルにはちゃんと書いてないですが、Rubyを含む多くの言語で代入の結果というのは右辺の値(この場合はhogehoge2
の値)そのままです。
つまり、hogehoge3 = hogehoge2の値
と同じです。
なお、hogehoge2
は最初のhogehoge1
への代入時に一度だけ評価されます。
そのため、hogehoge2
とhogehoge2の値
を区別して表現しています。
投稿2016/05/20 15:03
総合スコア84557
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/03 09:35