我用gets 提示用户给我peg1、peg2 或peg3,每个都引用在提示之前已经创建的数组。但是,来自用户的输入是一个字符串,可以是“peg1”、“peg2”或“peg3”。如何使用户的输入实际引用/附加到我已经制作的 3 个数组?
问问题
1406 次
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 回答