せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【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は何でもオブジェクトや。




これ以上は考察のアイデアが特にない。
一旦終わり。