2015-11-13 92 views
0
@songs = [{artist: 'Artist', title: 'Title String', playback: '04:30'} etc] 

def convert_to_secs 
    a = str.split(':').map!{|x| x.to_i} 
    return (a[0] * 60) + a[1] 
end 

def longest_possible(playback) 
    @songs.select do |hsh| 
     x = hsh[:playback].convert_to_secs 
    end 
    return x 
end 

內當試圖調用內部lo​​ngest_possible convert_to_seconds我得到以下錯誤:如何調用一個方法定義的另一個定義

longest_possible.rb:5:in `block in longest_possible': private method 
`convert_to_secs' called for "04:30":String (NoMethodError) 
from longest_possible.rb:4:in `select' 
from longest_possible.rb:4:in `longest_possible' 
from longest_possible.rb:15:in `<main>' 

我不知道如果我的問題可以用範圍運營商來解決,或者這是否需要與課程相關的東西(而不是我已經涉及到的東西)。請您指出我正確的方向嗎? PS,忽略第二個函數的功能,我還沒有開始做,但只是張貼例如。

+0

嘗試改變你的方法到'def convert_to_secs(a)'和調用'x = convert_to_secs(hsh [:playback])''。 –

回答

0

主要問題似乎是您使用字符串作爲接收者調用方法。然後嘗試在爲字符串預定義的方法中找到方法convert_to_secs,但找不到它。相反,你應該通過hsh [:playback]作爲參數。所以你的代碼應該是這樣的:

def convert_to_secs(str) # Note the argument str introduced here 
    # You don't need map! here. Normal map suffices. 
    a = str.split(':').map {|x| x.to_i} 
    # In Ruby, you can leave away the return keyword at the end of methods. 
    (a[0] * 60) + a[1] 
end 

def longest_possible(playback) 
    @songs.select do |hsh| 
    x = convert_to_secs(hsh[:playback]) 
    end 
    return x 
end 
相關問題