2012-10-14 217 views
1

我很困惑如何調用在同一個類中定義的另一個函數內的類中定義的函數。這是我做了什麼:在ruby中調用非靜態函數

class Test 
    def TestFunc(obj) 
    puts obj 
    end 

    def Test.StatFun(obj) 
    puts obj 
    TestFunc(obj) 
    end 
end 

Test.StatFun([[5,2], [4,3]]) 

當我在cmd.exe運行它,我得到以下錯誤:

ruby LawtonTest.rb 5 2 4 3 LawtonTest.rb:10:in StatFun': undefined method TestFunc' for Test:Class (NoMet hodError) from LawtonTest.rb:14:in `'

我無法弄清楚。任何幫助將不勝感激。

+0

我已經寫了一篇Ruby的介紹,可能會幫助你:http://www.apeth.com/rubyIntro/justenoughruby.html – matt

回答

1

你必須調用它的對象。我認爲你需要在Ruby中很好的參考oop,看看http://zetcode.com/lang/rubytutorial/oop/。但無論如何,方法(這是你聲明的def)必須在對象上調用,而不是全局函數。所以,如果你想使用TestFunc,試試這個:

def Test.StatFun(obj) 
    puts obj 
    Test.new.TestFunc(obj) 
end 

Test.new部分是用來創建一個對象,可以在其上使用TestFunc方法。

+0

謝謝。我會給教程一看。我沒有OOP背景,所以到目前爲止,ruby對我來說是非常陌生的。 – conlaw

+0

@conlaw:如果你來自C或其他程序語言,OOP非常困難。只需閱讀教程並搜索其他人。 – Linuxios

0

我無法在任何地方看到TestFunc的定義。你有沒有定義它?

此外,紅寶石一般的慣例是使用方法小寫名稱(如test_func


編輯回答前,應認真閱讀問題...

這裏的問題是, TestFunc僅針對實例的類Test定義,而當您調用Test.StatFun時,執行代碼的對象是實際的測試。這意味着它不知道TestFunc是什麼。要解決這個問題的方法之一是創建一個新的實例(因爲這是一件事類就知道該怎麼做):

def Test.StatFun(obj) 
    puts obj 
    new.TestFunc(obj) 
end