2013-11-04 27 views
1

我在initialize中調用了私有方法,並且引發了一個no方法錯誤。如果我註釋掉私有方法,它可以正常工作。我想我有使用私有方法的錯誤概念,對吧?在同一類中調用私有方法會引發Ruby 1.9上的錯誤

in `initialize': private method `start' called for #<RemoteFocusAutomation::Autofocus:0x007fcfed00a3d8> (NoMethodError) 

要點代碼是在這裏https://gist.github.com/poc7667/7299274

+2

不要鏈接到代碼添加到您的問題必不可少的,而不是將其包含在問題。當鏈接打破你的問題將是沒有意義的。 「關於您編寫​​的代碼問題的問題必須在問題本身中描述具體問題 - 幷包含有效代碼以再現問題本身。請參閱http://SSCCE.org以獲取指導。」 –

回答

3

Autofocus#initialize方法定義中刪除從self.start(args)self。你不應該在ruby中用明確的接收者調用私有方法。它必須是隱含的呼叫。

下面是一個例子:

# I tried to call the private method with explicit receiver,which I supposed no to do, 
# as Ruby wouldn't allow me,and will give me back error. 
class Foo 
    def initialize 
     self.foo 
    end 
    private 
    def foo;1;end 
end 

Foo.new 
# `initialize': private method `foo' called for # (NoMethodError) 

現在我在做什麼的Ruby允許我這樣做:

class Foo 
    def initialize 
     foo 
    end 
    private 
    def foo;p 1;end 
end 
Foo.new # => 1 # works!! 
+0

它**必須**是隱式接收器(不是*應*):) –

+0

@SergioTulentsev是的..我用英文語法不強。 :) –

相關問題