使用gets.chomp将字符串列表作为参数传递

时间:2015-03-29 14:55:30

标签: ruby arrays arguments

我有一个哈希:

@menu = { "pizza" =>  10, "burger" => 2, "kebab" => 5 }

order这样的方法:

def order *food, total
  running_total = self.menu.values_at(*food)
  cash = running_total.inject(0) {|sum, num| sum + num}
  if total == cash
    send_text
    puts 'Text has been sent' 
  else
    fail 'Not enough cash'
  end
end

我试图使用gets.chomp向客户询问订单。我如何使用用户的回复? gets.chomp似乎将字符串放入一个数组中,然后将其作为nil传递给该方法。

这是我到目前为止所做的:

puts 'Please place order'
placed_order = gets.chomp.split(' ')
puts 'Payment?'
total = gets.chomp.to_i
order(placed_order, total)

我如何将总数作为参数传递?

1 个答案:

答案 0 :(得分:0)

“...... gets.chomp似乎将字符串放入数组中”

  

split方法执行此操作

根据您定义order的方式,您需要执行此操作 order(*placed_order, total) 或者将order签名重新定义为def order food, total(这个名称表示食物需要一个阵列,例如食物,可能是“按顺序”)

稍微偏离主题,您可以按如下方式缩短订单方法:

def order *food, total
   cash = menu.values_at(*food).inject(&:+)
   #...

此外,不应该交换“总额”和“现金”(总数=您想要多少钱;现金==他们给你多少钱)?