2016-11-02 63 views
0

看來我不太理解在另一個類中初始化或使用類。未定義類的方法 - Sinatra

我有一個屈應用,並已創建了一個類,以從API處理獲取數據

# path: ./lib/api/bikes/bike_check 
class BikeCheck 
    def self.check_frame_number(argument) 
    # logic here 
    end 
end 
BikeCheck.new 

然後我有另一類需要消耗/使用check_frame_number方法

require 'slack-ruby-bot' 
# Class that calls BikeCheck api 
require './lib/api/bikes/bike_check' 

class BikeCommands < SlackRubyBot::Bot 
    match /^Is this bike stolen (?<frame_number>\w*)\?$/ do |client, data, match| 
    check_frame_number(match[:frame_number]) 
    client.say(channel: data.channel, text: @message) 
    end 
end 
BikeCommands.run 

check_frame_number被稱爲我得到一個undefined method錯誤。我想知道的是我沒有做什麼/理解什麼基本的東西,我想通過要求具有它可以使用的類的文件。

任何幫助表示讚賞

感謝

回答

1

不,你不能要求在類中定義的方法 - 類中定義的方法只適用於類,類實例和繼承之內。

混合方法只能包含模塊。

爲了解決你發出你既可以做

class BikeCommands < SlackRubyBot::Bot 
    match /^Is this bike stolen (?<frame_number>\w*)\?$/ do |client, data, match| 
    BikeCheck.check_frame_number(match[:frame_number]) # <=========== 
    client.say(channel: data.channel, text: @message) 
    end 
end 

或寫的方法和類include/extend一個模塊,你希望那方法是可用的。

+0

感謝您在清除向上。有沒有一種首選的方式,所以模塊或按照您的指定調用類? – Richlewis

+0

它通常取決於情況,我都使用。但是,如果你在'BikeCheck'中只定義了一個你想在'BikeCommands'中使用的方法 - 這肯定是一個使用模塊的情況:) –

+0

再一次感謝,當包含/擴展時,我可以通過名稱調用方法然後? – Richlewis

相關問題