begin
puts "Enter selection:nn"
$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
,而不是upcase!
。我还将使用case
语句而不是if
块。
begin
puts "Enter selection:nn"
input = gets.chomp
case input.upcase
when 'A'
call_function_1
when 'B'
call_function_2
end
end while $main != "~"
我不是特别理解你的代码,但你可能有一个常见的初学者的错误,使用破坏性的方法,而你不应该。当没有大写时,upcase!
将返回nil
,这可能会导致您的问题。特别是,您在字符串$main
上执行upcase!
,然后再次执行upcase!
。如果在第一个upcase!
中没有上行,那么您将在nil
上调用第二个upcase!
,这将引发错误。即使在第一个upcase!
中有上升,第二个上升肯定不会发生,即使在这种情况下你也会得到nil
。这根本说不通。修改upcase!
为upcase
顺便说一下,我不明白你为什么正确使用chomp
(而不是chomp!
),而是使用upcase!
(而不是upcase
)。我也不明白为什么你在gets
之后使用前者(这是可以的),但在if
elsif
end
块的每个条件下都使用后者(这不仅是多余的,而且有问题)。
此外,看起来你应该使用case
end
代替。