.upcase !使if语句不能正常工作


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代替。

最新更新