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 编写模块,您希望该方法在

中可用