2014-05-21 44 views
4

這個片斷:爲什麼Ruby公共和私人關鍵字/方法返回Object?

a = private 
p a 
p a.class 

給我:

Object 
Class 

我不知道是否privatepublic是關鍵字或Ruby的方法,但是,爲什麼他們返回Object(我指的是類)?這種奇怪的行爲有歷史或實際的原因嗎?

我用Ruby 2.1,Rubinius的2.2.6和JRuby 1.7.12測試這一點。

+1

檢查它的行爲對Rubinius的相同和JRuby是很勤快。但是他們的行爲與MRI相同的事實表明行爲與這些特定的實現無關,但是它是Ruby編程語言本身的一種固有行爲,所以我刪除了這些標記。 –

+0

好吧,我只是想確保它不是標準ruby解釋器的一些奇怪行爲;) –

回答

6

這是因爲它們不是關鍵字,而是在模塊上定義的方法:http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-private。它們返回一個接收到調用的模塊,如果您在應用程序的頂層調用它,則此接收器是Object類。

+0

非常感謝!但是我錯過了一件小事:爲什麼他們返回'''self'''而不是他們改變了可見性的方法? –

+0

@le_me - 它們無法返回它們更改爲私有的方法,因爲當方法在不帶參數的情況下執行時,尚未定義這些方法。 'self'是從這些方法返回的唯一邏輯對象。 – BroiSatse

+0

沒問題,非常感謝;) –

相關問題