【Ruby】お詫びと訂正 > パーフェクトRuby 学習感想文 ~余談:クラス自体も実行可能な文
クラス自体も実行可能な文を見た師匠が
new せんでもputsされるよ
という返信。
そうなのか?!
(参考・経緯など)
パーフェクトRuby 学習感想文 ~はじめに
クラスをnewしなくても地の文が実行される
class Hoge p "hhh" end
■実行結果
"hhh"
うわー。ほんとやー。
インスタンス生成時にクラスの地の文が実行されているのかと思ってた。
暗黙的にinitializeメソッドとみなされているというのは私の誤解でした。
インスタンス生成は関係ないわけだから、、
class Hoge p "hhh" end hoge = Hoge.new hoge = Hoge.new hoge = Hoge.new
■実行結果
"hhh"
うわー。インスタンス生成ぜんぜん関係ないー。
クラス地の文のselfオブジェクトは何者?
class Hoge p self end p self
■実行結果
Hoge main
オブジェクトじゃない?クラス?
⇒正しくはClassクラスのオブジェクト。
下の「HogeはClassクラスのオブジェクト」に加筆。
クラス地の文ではstaticなメソッドは実行できる
class Hoge def gohan "gohandayo" end def self.ocha "ochadayo" end p ocha p gohan end
■実行結果
"ochadayo" `<class:Hoge>': undefined local variable or method `gohan' for Hoge:Class (NameError)
これは予想通り。
HogeはClassクラスのオブジェクト
ちょっと待ち。さっきのエラーメッセージ、HogeがClassクラスのオブジェクトだといっている?
このところ⇒「for Hoge:Class」
たしかmain文でエラーが発生したときは・・・
class Hoge end p jj
■エラー文
`<main>': undefined local variable or method `jj' for main:Object (NameError)
やっぱり。「 main:Object 」って書いてある。
HogeはClassクラスのオブジェクトなのか。
Rubyは何でもオブジェクトや。
これ以上は考察のアイデアが特にない。
一旦終わり。