2012-02-07 11 views
0

私はこのコードをRubyで書いていますが、irbでファイルをテストしようとすると、NoMethodError: undefined method 'find_displacement' for SymbolTable:Classが届きます。私はここで間違って何をしていますか?Ruby:未定義のメソッドエラー

class SymbolTable 
    include Singleton 

    @@MAX_SYMBOLS = 500 
    @@DISPLACEMENT = SymbolTable.find_displacement() ##error here 
    @@TABLE_SIZE = @@MAX_SYMBOLS + (@@MAX_SYMBOLS * 0.1) + @@DISPLACEMENT 

    def initialize() 
    "Constructs a single instance of a SymbolTable to be used by the compiler" 
     @sym_table = Array.new(@@TABLE_SIZE) 
    end 

    def add(element, index) 
    "Inserts an element (identifier) into the SymbolTable" 
    @sym_table[index] = element if element.is_a? SymbolTableEntry 
    end 

    def SymbolTable.find_displacement() 
    n = 1 
    k = @@MAX_SYMBOLS 
    while not (k + n).odd? do 
     n += 2 
    end 

    return k + n 
    end 

    def to_s 
    "Prints a list of all elements currently in the SymbolTable" 
    pp @sym_table 
    end 
end 

答えて

4

メソッドを呼び出す前に定義する必要があります。

クラス変数が設定されている時点では、シングルトンメソッドはまだ定義されていません。

+0

......ありがとうございました –

+0

+1 - Doh、キーボードで眠っています。 ;-) –

関連する問題