Ruby NoMethodError(未定义方法 '' .. .' for ' .... :Class'

标签 ruby rubygems irb

require_relative 'json_lookup'
require_relative 'csv_lookup'
require_relative 'error'

BASE_RATE = 'EUR'

class CurrencyExchange

  def initialize(file:, date:, from:, to:)
    @file = file
    @date = date
    @from = from
    @to = to
  end

  def rate
    lookup = find_lookup
    lookup.to_currency / lookup.from_currency
  end

  private
  def find_lookup
    case File.extname(@file)
    when ".json"
      JsonLookup.new(@file, @date, @from, @to)
    when ".csv"
      CsvLookup.new(@file, @date, @from, @to)
    else raise FileError
    end
  end
end

当我在 irb 中运行CurrencyExchange.rate 时,我不断收到此错误,所以我猜测汇率方法出了问题,但无法弄清楚原因。但我可能错过了一些完全明显的东西......因为我是 Ruby 的初学者,希望得到任何帮助:)

回溯如下..

irb(main):003:0> CurrencyExchange.rate(Date.new(2018, 11, 22), "USD", "GBP")                                            Traceback (most recent call last):
        5: from C:/Ruby26-x64/bin/irb.cmd:31:in `<main>'
        4: from C:/Ruby26-x64/bin/irb.cmd:31:in `load'
        3: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        2: from (irb):3
        1: from (irb):3:in `rescue in irb_binding'
NoMethodError (undefined method `rate' for CurrencyExchange:Class)

最佳答案

rate 是示例中的实例方法,但 CurrencyExchange.rate 尝试调用类方法。

要解决此问题,请首先初始化一个实例,然后对该实例调用 rate。此外,rate 不接受参数,您需要将变量传递给初始化方法。

currency_exchange = CurrencyExchange.new(
  file: file, date: Date.new(2018, 11, 22), from: "USD", to: "GBP"
)
currency_exchange.rate

请注意,初始化程序需要 4 个命名参数。您还需要将文件传递给 new 方法。

关于Ruby NoMethodError(未定义方法 '' .. .' for ' .... :Class',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66670886/

相关文章:

ruby - 有没有办法查看项目中所有 gem 的文档?

ruby - IRB.start 不启动

ruby - 如何在 irb 控制台中使用 open() 从 .txt 文件中打印出基本文本? # ruby

ruby - ruby 有没有办法在 4-5-4(零售)日历中找到年初

python - 适用于 Ruby、Ruby on Rails、Python 的智能感知

ruby - 尝试通过 https 发出发布请求时获取 OpenSSL::SSL::SSLError: SSL_set_tlsext_host_name

ruby-on-rails - ActiveModel::ForbiddenAttributesError

ruby-on-rails-3 - Rails 3 - 用于存储和跟踪更改的 gem

ruby - 断点和irb的结合(REPL)

ruby - 与 "unexpected unary+"之后的空格相关的奇怪语法错误 `+`