Ruby on rails 如何在ruby中从散列中乘法?

Ruby on rails 如何在ruby中从散列中乘法?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我刚开始学习ruby。我有一个简单的问题。我有我的杂烩 汇率=[“美元”=>1,“欧元”=>1.2,“英镑”=>1.3] 所以我想做的是,我想做一个脚本,计算写速率。 例如,如果我想知道20欧元的美元汇率,脚本会告诉我, 您的汇率是24美元 这是我的密码 class ExchangeRate def initialize (exchange_amount_id) @exchange_amount = exchange_amount_id end exchange_rate

我刚开始学习ruby。我有一个简单的问题。我有我的杂烩
汇率=[“美元”=>1,“欧元”=>1.2,“英镑”=>1.3]
所以我想做的是,我想做一个脚本,计算写速率。 例如,如果我想知道20欧元的美元汇率,脚本会告诉我,
您的汇率是24美元

这是我的密码

class ExchangeRate
  def initialize (exchange_amount_id)
    @exchange_amount = exchange_amount_id
  end

  exchange_rate = ["usd" => 1, "eur" => 1.2, "gbp" => 1.3]

  def exchange ()
  end 

  classob = ExhangeRate.new(20)
  classob.exchange()
  end
end
但我仍然想知道如何进行计算,以显示不同货币的汇率

class ExchangeRate
  def initialize (rate)
    @rate = rate
  end

  def exchange(from, to, value)
    @rate.fetch(from) / @rate.fetch(to) * value
  end
end

rate = { usd: 1, eur: 1.2, gbp: 1.3}
money = ExchangeRate.new(rate)
puts money.exchange(:eur, :usd, 20)
# you will get 24
注意:fetch将在具有给定键的散列中查找值


注意:fetch将在具有给定键的散列中找到值

我认为您可以将该类作为服务。你不需要为它创建新的对象。相反,只需创建一个class.call方法

class RateExchanger
  EXCHANGE_RATES = {
      usd: 1,
      eur: 1.2,
      gbp: 1.3
  }.freeze

  def self.call(to:, value:, from: :usd)
    (value / EXCHANGE_RATES[from] * EXCHANGE_RATES[to]).round(2)
  end
end

RateExchanger.call(to: :gbp, value: 100, from: :eur)

我想你可以把这门课作为服务。你不需要为它创建新的对象。相反,只需创建一个class.call方法

class RateExchanger
  EXCHANGE_RATES = {
      usd: 1,
      eur: 1.2,
      gbp: 1.3
  }.freeze

  def self.call(to:, value:, from: :usd)
    (value / EXCHANGE_RATES[from] * EXCHANGE_RATES[to]).round(2)
  end
end

RateExchanger.call(to: :gbp, value: 100, from: :eur)

旁注:永远不要在货币计算中使用浮点数。旁注:永远不要在货币计算中使用浮点数。因为它没有实例和状态,所以它可以是模块而不是类(
Module ratexchanger
)。因为它没有实例和状态,所以它可以是模块而不是类(
模块速率交换器
)。