2015-09-14 74 views
0

我試圖在我的項目中找到錯誤的原因。我認爲這個問題的主題是原因。下面是一些描述問題代碼:我可以在不屬於班級或其父母的班級中調用一種方法嗎?

def self.foo() 
    content = 10 
    return content 
end 

class MyClass 
    def self.bar() 
     number = self.foo() 
     puts number 
    end 
end 

那麼,是不是可以從類中的類方法調用的類之外​​的方法?從我試過的東西看起來似乎沒有用,但我不確定。

+0

你應該選擇其他的類名和其他方法名稱爲您的例子。類似於「MyClass」或「foo」/「bar」/「baz」。 – Stefan

+0

喜歡這個?否則,請隨時編輯,以便我知道如何在將來做到這一點。 – Ruts

+2

好多了。已經有一個類['Class'](http://ruby-doc.org/core-2.2.3/Class.html),還有一個方法['method'](http://ruby-doc.org /core-2.2.3/Object.html#method-i-method)這可能會讓人困惑:-) – Stefan

回答

1

您在一個類的方法上下文中使用self,這意味着你要調用它的類。由於該方法未在該類中定義,因此會出現錯誤。如果你刪除了調用的self.部分,這將會成功。

def foo 
    10 
end 

class Bar 
    def self.baz 
    puts foo 
    end 
end 

但是,它會工作,只是因爲主要範圍中定義的方法去。如果一切都被封閉在一個模塊中,你必須在方法位於明確說明:

module Bong 
    def self.foo 
    10 
    end 

    class Bar 
    def self.baz 
     puts Bong.foo 
    end 
    end 
end 
+0

對於我的項目,它確實被封裝在一個模塊中!我會檢查你的答案。 – Ruts

+0

除非將'foo'定義爲全局函數,否則第一個示例不起作用。 – Stefan

+0

@Stefan,對,我修好了。 – ndn

2

入住這

class Class2 
def self.method() 
    content = 10 
    return content 
end 
end 
class Class 
    def self.classmethod() 
    number = Class2.method() 
    puts number 
    end 
end 
相關問題