0

我用gets 提示用户给我peg1、peg2 或peg3,每个都引用在提示之前已经创建的数组。但是,来自用户的输入是一个字符串,可以是“peg1”、“peg2”或“peg3”。如何使用户的输入实际引用/附加到我已经制作的 3 个数组?

4

4 回答 4

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"
于 2013-05-13T05:38:38.660 回答
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
于 2013-05-13T07:24:03.017 回答
0

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

于 2013-05-13T05:14:41.783 回答
0

这可能会满足您的要求。

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

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

这已充分编辑(来自先前的答案)以避免将用户输入评估为 Ruby 命令。将在 peg4 或其他不存在的 peg 上引发错误。

and控制有助于检查输入。

于 2013-05-13T06:40:33.250 回答