Ruby“获取”提示用户输入。如何获取输入(字符串)以引用现有对象?

时间:2013-05-13 05:05:23

标签: ruby arrays prompt gets

我提示用户让我给peg1,peg2或peg3,每个都引用一个在提示之前已经制作的数组。但是,来自用户的输入是一个字符串,它将是" peg1"," peg2"或" peg3"。如何让用户的输入实际引用/附加到已经制作的3个阵列?

4 个答案:

答案 0 :(得分:1)

很难理解你在问什么,但是对你的意思做一些猜测,我认为这样的事情会告诉你如何做你想做的事:

$peg1 = [:peg, :one]
$peg2 = [:peg, :two]
$peg3 = [:peg, :three]

def ask_which_peg
  print "Please choose peg1, peg2, or peg3: "
  case gets.chomp
  when "peg1"
    $peg1
  when "peg2"
    $peg2
  when "peg3"
    $peg3
  else
    nil
  end
end

peg = nil
until(peg)
  peg = ask_which_peg()
end

print peg, "\n"

答案 1 :(得分:1)

如果将所有可能的数组分配给由数组名称键入的哈希,则只需向用户询问该名称,然后从哈希中选择数组。使用这种技术,您不需要将值硬编码为长case语句或(甚至更糟)eval任何内容。

def ask_for_peg(pegs)
  peg = nil
  while peg.nil?
    print("Which peg do you want? ")
    id = gets.strip
    peg = pegs[id]
  end
  peg
end

available_pegs = {
  "peg1" => array_for_peg1,
  "peg2" => array_for_peg2,
  "peg3" => array_for_peg3
}

selected_peg = ask_for_peg(available_pegs)
# results in one of the arrays assigned in the available_pegs array above

答案 2 :(得分:0)

数组的名称是为了您的利益,但不能在实际程序中使用。因此,您无法检查输入是否等于变量的名称。但是,您可以使用if语句if input = peg1轻松检查输入是否等于“peg1”,“peg2”或“peg3”,并在每种情况下返回正确的数组。

答案 3 :(得分:0)

这可能就是你所要求的。

peg1 = ['yellow']
peg2 = ['blue']
peg3 = ['green']
input = gets.chomp

input =~ /peg\d/ and
puts eval("#{input}")

这是经过充分编辑的(从之前的答案),以避免用户输入作为Ruby命令。会对peg4或其他不存在的挂钩产生错误。

and流量控制有助于检查输入。

相关问题