.upcase!使if语句无法正常工作

时间:2014-07-17 21:05:22

标签: ruby if-statement while-loop upcase

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! ,当我删除它,它工作正常...为什么?

2 个答案:

答案 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 != "~"