2016-04-22 76 views
0

說,我們在交互式Ruby瀏覽器,並運行:在Ruby中,當我們命令ruby放置某些東西時,「放」什麼?

>> sometext = "Hello, Cruel World!" 
>> puts sometext 
Hello, Cruel World! 
=> nil 
>> 

什麼對象是做放?我相信坐在那裏看起來「放」自己的裸體方法是「語法糖」,但我也打賭,有一些明確的名稱爲執行這些操作的「對象」......像Ruby ::自我或自我::事情還是......這是什麼?

回答

4

爲了說明在IRB:

2.3.0 :002 > Kernel.private_instance_methods.include?(:puts) 
=> true 
2.3.0 :003 > self 
=> main 
2.3.0 :004 > self.class 
=> Object 
2.3.0 :005 > self.class.ancestors 
=> [Object, Kernel, BasicObject] 

由於肯裏克簡在下面他的評論說,「內核是混合在一個模塊對象,它提供了一個稱爲看跌期權私有方法在Ruby中,私有方法即可。不要用明確的接收器來調用,所以當你問什麼對象在做什麼時,當你調用puts時,它就是當前對象的範圍(自我)。

+0

謝謝。現在我將不得不閱讀其他地方來弄清楚使用什麼區別。和::是在紅寶石。 'Kernel.puts「Hello!」'和'Kernel :: puts「Hello!」'在IRB中工作。所以,現在我知道什麼是在做所有的投入。那種東西在半夜醒來,我早上忘了它,「不管怎麼樣,'是什麼'放''弦?」我只是醒來困惑和煩躁,我不知道爲什麼:) –

+0

@OswaldRoswell'.'只用於調用方法,'::'也可以做到這一點,但也訪問範圍常量。使用'::'進行方法調用的IMO不必要地混淆事物,應該避免。 – Max

+0

我同意100%與@Max。更好地使用'。'並且從不爲此使用'::'。 –

3

這是一個叫做main特殊的對象,這是Object一個實例,它繼承Kernel

+0

謝謝。我似乎模糊地回憶起這些方面的一些東西......那個人可以輸入類似於'Kernel :: main.puts(「Hello World!」)'的東西,而且在功能上與'puts'Hello World! puts'ing「對象具體,但我不記得確切的語法... –

+0

@sawa在他的例子中,它將是'main',但總的來說,它只是無論什麼」自我「發生。如果你在實例方法中放置''puts',那麼這個實例就會執行它。 – Max

相關問題