我提示用户让我给peg1,peg2或peg3,每个都引用一个在提示之前已经制作的数组。但是,来自用户的输入是一个字符串,它将是" peg1"," peg2"或" peg3"。如何让用户的输入实际引用/附加到已经制作的3个阵列?
答案 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
流量控制有助于检查输入。