【问题标题】:Using gets.chomp to pass list of strings as arguments使用 gets.chomp 将字符串列表作为参数传递
【发布时间】:2015-06-02 13:10:57
【问题描述】:

我有一个哈希:

@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)

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

【问题讨论】:

  • @menu 与您的问题有何关系?
  • @sawa 我猜他的意思是“我有一个带有 attr_reader 的 \@menu 哈希”。
  • 是的,抱歉,@menu 是一个用类初始化的哈希

标签: ruby arrays arguments


【解决方案1】:

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

split 方法是这样做的

根据您定义order 的方式,您需要执行 order(*placed_order, total) 或将order 签名重新定义为def order food, total(表示食物需要数组的名称,例如食物,可能是“有序”的)

稍微跑题了,可以缩短下单方式如下:

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

另外,“total”和“cash”不应该互换吗(total == 你想要多少钱;cash == 他们给了你多少钱)?

【讨论】:

  • 嗨,这工作得很好,我想知道你是否知道我可以用gets.chomp忽略逗号吗?就这样在输入订单时它会流动
  • 这假设你的输入是空格分隔的,如果你想用逗号分隔或用逗号和可选空格分隔,你可以在/,\s*/ 上分割结果。
  • @Munded 如果您对答案感到满意,请投票或将其标记为已接受或两者兼而有之。谢谢。
  • 哦,我指的是输入订单时的逗号,因为我可以输入“Burger,Burger”而不是输入“Burger Burger”而不会失败
猜你喜欢
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2014-08-13
相关资源
最近更新 更多