Ruby環境裡得self,會因為不同的範圍以及呼叫方式得不同,而代表的物件也不相同。
首先我們先來看self是什麼:
> self #=> main
> self.class #=> main
> self.is_a? Object #=> true
當我們印 self 得到 main,main 為 ruby 最頂層 ( top-level ) 物件,我們不指派任何東西給他。
> self = 1 #=> 出現錯誤訊息
> abc = 1 #=> 1
類別定義 ( class definition ),self 為 A 類別本身
class A
p self
end
=> A
類別方法 ( class method ),self 為 A 類別本身
class A
def self.say_hi
p self
end
end
A.say_hi
=> A
實體方法 ( instance method ),self 為 A 的實體
class A
def say_hi
p self
end
end
p a = A.new
a.say_hi
=> #<A:0x00007fbf020ec0e0>
模組定義 ( module definition ),self 為 B 模組本身
module B
p self
end
=> B
繼承 ( inheritance ),self 為 B 的實體
class A
def say_hi
p self
end
end
class B < A
end
abc = B.new
abc.say_hi
=> #<B:0x00007fd14207e700>
引入模組 ( include module ),self 為 B 的實體
module A
def say_hi
p self
end
end
class B
include A
end
abc = B.new
abc.say_hi
=> #<B:0x00007fecd190e9b0>
例句到這裡就先結束啦,其實爬了一堆文章還是覺得很抽象啊 ?
也許哪天別人問我什麼是 self 我可能還是會說:就是自己啊!
再來就要來偷一下Ruby女孩的梗,Ruby女孩 10萬.times{puts '為什麼'}
我大概是10萬.times{puts '謝謝'}
謝謝那些盯著我參賽的老師同學
謝謝願意幫我這個笨腦袋想題材的有魚?
謝謝專題組員都很善良讓我提早回家寫文章
也謝謝不知道是誰,但是願意幫菜鳥文章按like,這是很大的鼓勵呀!
專題跟鐵人同步進行,每天都要努力擠出時間!真得沒想過自己真得可以這樣撐到第三十天啊!XD
總之,我做到了。:.゚ヽ(*´∀`)ノ゚.:。