Ruby:◇変数と定数:基礎的な考え方は他の言語と同じ ・・・ 【Ruby:9.5歩目】
◇定数:アルファベット大文字で始まる
これはわかり易いですねぇ。VBやPHPでスクリプト書くときも
自主的に定数は 全部大文字とかしてましたが
(例)ROOT_DOMAIN = "****"
Ruby では 決まり なんですねぇ。
p Sitename "=> "ネットショップ開設比較"
・定数は再代入ができない
1度入れたら2度目以降 入れ直しできない
ちなみにそれを行うと次の警告メッセージだが
「****.rb:3: warning: already initialized constant Sitename」
これは、実行時にはエラーとはならない
だがもちろん こんな使い方はしないね。
・・・当たり前だよね。だったら変数使えばいい。
・定数はローカルメソッドよりも広いスコープで
参照できる
ん? ちょっと気になる。曖昧だなぁ。一応確実に抑えておこう
1:クラス/モジュールで定義された定数は、そのクラス/モジュールの中で参照可
2:クラス/モジュール定義がネストしている場合には、内側のクラス/モジュールから外側の定数を参照可
3:スーパークラス及びインクルードしたモジュールの定数を参照可
4:直接参照できない定数は、::演算子を使って、クラス/モジュール名を指定することにより参照
[未定義の定数]
未定義の定数は参照できない
未定義の定数にアクセスすると
NameError が発生する(ローカル変数と同じだ)
*****.rb:5: uninitialized constant Sitename2 (NameError)
第9.6歩
◇インスタンス変数:@で名前が始まる
今回は概略。
ひとつのオブジェクトに所属し
スコープもそのオブジェクトに限られる
(使用例)
def foo # インスタンスメソッド定義
@a = "Hello" # インスタンス変数
end
end
[未定義のインスタンス変数]
未定義のインスタンス変数は参照できない
未定義のインスタンス変数にアクセスすると
nil が返ってくる
第9.7歩
◇クラス変数:@@で名前が始まる
クラス変数のスコープは、クラス定義の中
(使用例)
@@a = "Hello" # クラス変数
p @@a #=> "Hello"
end
・この例では、Barクラスの中でのみ使用可能
・あるクラスの中で定義されたクラス変数を
他のクラス定義の中から参照することはできない
[未定義のクラス変数]
未定義のクラス変数は参照できない
未定義のクラス変数にアクセスすると
NameError が発生する(ローカル変数と同じだ)
*****.rb:20: uninitialized class variable @@b in Object (NameError)













