Ruby 初心者スレッド Part 55
■ このスレッドは過去ログ倉庫に格納されています
0513デフォルトの名無しさん
2014/09/20(土) 11:19:07.92ID:Fiyj9EA+参考書や解説で言わないんだろうか
そんな参考書や解説サイトは捨ててしまえ窓開けてポイだ
>>509
Rubyは基本すべてオブジェクトであり、内部的オブジェクト置き場に厳然として「置か」れていて「動か」ない
で、すべての変数はオブジェクトにぺたんと貼られたただのラベルだ
もし「変数は箱のようなもので…」とか言ってるRubyの解説があったらいますぐ燃やせ
で、オブジェクト自体は移動されず、変数名変更は単にラベルの追加なので、
var1 = "foo"
CONST = var1
とやっても文字列オブジェクトが2つになったりはしない。"var"という固定のオブジェクトにラベルが2枚貼られるだけ
irb> var1 = "foo"
irb> p var1.object_id
-596605568
irb> CONST = var1
irb> p CONST.object_id
-596605568 # 一緒
irb> p CONST
"foo"
つまり、いちどどっかでオブジェクトを作った場合、それに参照可能なスコープの変数がついている限り、
それをどこから呼んでも消えたりはしない
つまり、スコープに気をつけている限り、定数で「固定化」させておく必要がない
じゃあなんで定数があるのかというとクラス内外からCLASS::CONSTのように大文字で呼べるとカッコイイからだ!(わりとマジ)
シンボルはちょっと特殊で、呼び名とオブジェクトIDがひとまとめになってる
ハッシュ入り配列とか、同じ見かけでオブジェクトIDの違う文字列を何百個も生成するのは無駄っぽい気がして蕁麻疹が出るような人が使う
[{"title" => "BOOK1", "price" => 1200}, {"title" => "BOOK2", "price" => 800}, ...]
だと "title" という文字列オブジェクトが配列要素の数だけ生成されてしまうので
[{:title => "BOOK1", :price => 1200}, {:title => "BOOK2", :price => 800}, ...]
とキーをシンボルにすると「タイトル」に関してはオブジェクトが1個で済む、みたいな話
■ このスレッドは過去ログ倉庫に格納されています