class 的未定义方法 - Sinatra
Undefined method for class - Sinatra
我似乎不太明白在另一个 class 中初始化或使用 class。
我有一个 Sinatra 应用程序并创建了一个 class 来处理从 api
中获取数据
# path: ./lib/api/bikes/bike_check
class BikeCheck
def self.check_frame_number(argument)
# logic here
end
end
BikeCheck.new
然后我有另一个 class 需要 consume/use 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
错误。我想知道的是我不是什么基本的东西 doing/understanding,我想通过要求具有 class 的文件可以使用。
不,您不能要求 class 中定义的方法 - class 中定义的方法仅适用于 class、class 实例和继承。
只有包含模块才能使用混合方法。
要解决您的问题,您可以这样做
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
中的方法和 class 编写模块,您希望该方法在
中可用
我似乎不太明白在另一个 class 中初始化或使用 class。
我有一个 Sinatra 应用程序并创建了一个 class 来处理从 api
中获取数据# path: ./lib/api/bikes/bike_check
class BikeCheck
def self.check_frame_number(argument)
# logic here
end
end
BikeCheck.new
然后我有另一个 class 需要 consume/use 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
错误。我想知道的是我不是什么基本的东西 doing/understanding,我想通过要求具有 class 的文件可以使用。
不,您不能要求 class 中定义的方法 - class 中定义的方法仅适用于 class、class 实例和继承。
只有包含模块才能使用混合方法。
要解决您的问题,您可以这样做
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
中的方法和 class 编写模块,您希望该方法在