2012-05-11 88 views
0

我試圖將兩個類似的方法合併成一個,但是我遇到了一些問題。移動到一個方法會導致`未定義的方法`

目前:

def self.tree 
    self.projects.sort_by(&:name).map do |assembly| 
    [ assembly, assembly.assemblies.map(&:tree) ] 
    end 
end 

def tree 
    [ self, self.assemblies.map(&:tree), self.parts ] 
end 

我試圖將其更改爲

def self.tree 
    self.build_tree(self.projects) 
end 

def tree 
    self.build_tree([self]) 
end 

def build_tree(set) 
    set.sort_by(&:name).map do |assembly| 
    [ assembly, assembly.assemblies.map(&:tree), assembly.parts ] 
    end 
end 

,但我只是得到undefined method 'build_tree' for #<Class:0x000000036a5588>

任何想法?

回答

0

您可能調用樹作爲類方法。在這種情況下,此方法嘗試調用靜態build_tree(self是自己的Class)。工作你需要做這樣的事情:

def self.build_tree(set) 
    code... 
end 
+0

+0 Ruby沒有靜態方法。 –

+0

對不起,這是一種類方法。我的錯。 –

相關問題