2017-02-28 106 views
-2

我正在運行此代碼,但出現錯誤。Ruby錯誤:參數數量錯誤(1代表0)(ArgumentError)

代碼在這裏: -

class Text 
    def post(success, error) 
     if authenticate?(@user, @password) 
      success.call 
     else 
      erro.call 
     end 
    end 
end 
text = Text.new('Ruby Bits!') 
success = ->{ puts "Sent!"} 
error = ->{ raise 'Auth error'} 
text.post(success,error) 

請告訴我們。如何解決這個問題呢?

+0

由於'POST'方法定義有兩個參數,你」 d需要將兩個參數傳遞給'post'如下:'test.post(成功,錯誤)' – Surya

+0

我試試。它不會消除這個錯誤。顯示相同的錯誤 – test

+0

您正在傳遞參數「Ruby Bits!」到'Text'的初始值設定項,但它沒有任何參數。 – jordanm

回答

0

仔細觀察ArgumentError從哪個行號引發(在你的案例中,第25行)。

您將一個參數傳遞給Text#initialize,但尚未定義帶有一個參數的初始化版本。

試試這個(調用默認的,無參數的構造函數文本):

class Text 
    def post(success, error) 
     if authenticate?(@user, @password) 
      success.call 
     else 
      error.call 
     end 
    end 
end 
text = Text.new 
success = ->{ puts "Sent!"} 
error = ->{ raise 'Auth error'} 
text.post(success, error) 

或定義一個參數初始化:

class Text 
    def initialize(your_meaningful_argument) 
     # do stuff 
    end 

    def post(success, error) 
     if authenticate?(@user, @password) 
      success.call 
     else 
      error.call 
     end 
    end 
end 
+0

顯示錯誤:''後':未定義的方法'驗證?'對於#(NoMethodError) \t from level-1.rb:30:in'

' – test

+0

是的,現在你試圖調用實例方法進行身份驗證?在你的Text類的實例上,但你還沒有定義該方法。 –

+0

你必須定義它: class Text def authenticate? #do stuff end end ''' –

相關問題