首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby:跳过Gets值

Ruby:跳过Gets值
EN

Stack Overflow用户
提问于 2010-11-26 01:00:25
回答 1查看 704关注 0票数 4

我有一个文件检查和排序脚本。现在,我想让用户选择他/她希望如何对最终输出进行排序。遗憾的是,Ruby似乎忽略了get命令。如果我注释掉整个部分,脚本会完成得很好。请忽略def读数。我还没读完那本书...

所以我的问题是:为什么Ruby跳过get命令。

代码语言:javascript
运行
复制
class Product
  attr_reader :id, :name, :price, :stock
  def initialize(id,name,price,stock)
    @id = id
    @name=name
    @price=price
    @stock=stock
  end
  def readout
    self.each do |product|
      print product.id
      print "|"
      print product.name
      print "|"
      print product.price
      print "|"
      print product.stock
      puts ""
    end
  end
end

products = []
newproducts= []

if ARGV[0] != nil
  if File.exist?(ARGV[0])
    File.open(ARGV[0] , "r") do |f|
      f.each_line do |line|
        products << line
      end
    end
    products.each do |product|
      data = product.split(",")
      newproducts.push(Product.new(data[0].strip, data[1].strip, data[2].strip.to_i, data[3].strip.to_i))
    end

    puts "What to sort by?"
    question = gets.strip
    if question == "name"
      newproducts.sort! {|a,b| b.name <=> a.name}
    elsif question == "price"
      newproducts.sort! {|a,b| b.price <=> a.price}
    elsif question =="id"
      newproducts.sort! {|a,b| b.id <=> a.id}
    elsif question == "stock"
      newproducts.sort! {|a,b| b.stock <=> a.stock}
    else
      puts "Wrong Answer."
    end

    #End of File Check
  else
    puts "File #{ARGV[0]} does not exist."
  end

  if ARGV[1] != nil
    File.open(ARGV[1], "w") do |f|
      newproducts.each do |product|
        puts "Added #{product.name} to the file."
        data = {product.id, product.name, product.price, product.stock}
        f.puts(data)
      end
    end
    #End of ARGV check.
  else
    puts "No output file assigned."
  end

  #End of master ARGV check.
else
  puts "No command given."
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-26 01:11:52

Kernel#gets方法从ARGF而不是$stdin读取数据。这意味着如果给定了命令行参数(或者更准确地说,如果ARGV不为空),它将从ARGV中的文件中读取。只有在其他情况下,它才会从标准输入中读取。

要始终从标准输入中读取,请使用$stdin.gets而不是gets

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4279352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档