簡體   English   中英

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

[英]Ruby NoMethodError (undefined method ''…' for '…:Class'

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 時,我不斷收到此錯誤,所以我猜測 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嘗試調用 class 方法。

為了解決這個問題,首先初始化一個實例並調用然后對該實例進行rate 此外, rate不接受 arguments,您需要將變量傳遞給初始化方法。

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

注意初始化器需要 4 個名為 arguments。 您還需要將文件傳遞給new方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM