2013-10-23 117 views
1

如果我有這在我的主程序:默認情況下,所有方法都是公開的嗎?

def hi 
    puts 'hi' 
end 
self.hi 

它不會工作,因爲hi是私人的。

我已經瞭解到,Ruby中的所有方法默認都是公共的,但這似乎並不是這種情況,爲什麼?

+0

你爲什麼加上自我。 ? –

回答

3

main環境中定義方法是很棘手的。當您在main中定義它時,默認情況下私有方法。所以,你要麼必須使用它作爲私人:

def hi 
    puts 'hi' 
end 
hi 

或明確地把它公開:

def hi 
    puts 'hi' 
end 
public :hi 
self.hi 
+0

很棒的回答。這樣做有沒有好處? – David

0
def main_method    
    p "This is from main_method" 
end       
public :main_method   

class Klass     
    def initialize    
    Object.main_method # Or we can simply say main_method as we do in the second exaple 
    end       
end       

puts Klass.new     

這是如圖所示創建對象「類的方法」的方式。如果它是私人的,那麼我們不能指定接收者。

當它是私有的,因爲它是在默認情況下,那麼我們就這樣稱呼它:

def main_method    
    p "This is from main_method" 
end       

class Klass     
    def initialize    
    main_method # With it being private, implicit self only    
    end       
end       

puts Klass.new     

那麼,有沒有優勢無論哪種方式?我想如果你把它變成私人的,你會向開發者發送一些你有偏好的信息,這應該用作私人方法,而不是公共方法。

實際上,我沒有看到優勢。

+0

你的句子「如果你把它變成私人的......這應該被當作私人......」是一個重言式。它沒有任何內容意義。 – sawa

+0

你對此正確。我正在考慮'Kernel#puts'和'IO#puts'的具體例子。一個我們應該用作私有方法,你不能明確地使用接收者,另一個我們可以指定接收者,這意味着要這樣使用。 – vgoff

1

方法默認爲公開,,但「頂級程序」爲。如果你定義了一個看起來像頂級程序,它將實際上被定義爲private實例方法Object

相關問題