begin
puts "Enter selection:\n\n"
$main = gets.chomp
if $main.upcase! == "A"
call_function_1
elsif $main.upcase! == "B"
call_function_2
end
end while $main != "~"
使用代码,输入A会运行call_function_1,但输入B似乎会被忽略。
问题似乎是.upcase! ,当我删除它,它工作正常...为什么?
答案 0 :(得分:0)
我特别不了解您的代码,但是当您不应该使用破坏性方法时,您可能会遇到常见的初学者错误。如果没有发生爆炸,upcase!
将返回nil
,这可能会导致您的问题。特别是,您正在对字符串upcase!
执行$main
,然后再对其执行upcase!
。如果第一个upcase!
中没有更新,那么您将调用upcase!
上的第二个nil
,这将引发错误。即使在第一个upcase!
中出现了大写,第二次升级也肯定不会发生,即使在这种情况下你也会得到nil
。它完全没有意义。将upcase!
更改为upcase
。
顺便说一句,我不明白为什么你正确使用chomp
(而不是chomp!
),而是使用upcase!
(而不是upcase
)。而且我也不明白为什么你在gets
之后使用前链接(这没关系)但是在if
elsif
end
块中的每个条件下都在做后者(这不仅是多余的,而且是有问题的。)
此外,您似乎应该使用case
end
代替。
答案 1 :(得分:0)
您应该使用upcase
,而不是upcase!
。我还会使用case
语句而不是if
块。
begin
puts "Enter selection:\n\n"
input = gets.chomp
case input.upcase
when 'A'
call_function_1
when 'B'
call_function_2
end
end while $main != "~"