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

4

2 回答 2

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 != "~"
于 2014-07-18T00:14:36.340 回答
0

我不是特别了解您的代码,但是您可能会遇到一个常见的初学者错误,即在您不应该使用破坏性方法时。当没有大写发生时upcase!将返回,这可能会导致您的问题。nil特别是,你正在做upcase!一个 string $main,然后再做upcase!一次。如果第一个没有向上转换upcase!,那么您将调用第二个upcase!on nil,这将引发错误。即使第一次向上转换upcase!,第二次向上转换也肯定不会发生,nil在这种情况下你会得到平衡。这根本没有意义。更改upcase!upcase

顺便说一句,我不明白您为什么chomp正确使用(而不是chomp!),而是使用upcase!(而不是upcase)。而且我也不明白为什么你使用前者链接在之后gets(这没关系),但在if elsif end块中的每个条件下都使用后者(这不仅是多余的,而且是有问题的)。

此外,看起来您应该case end改用它。

于 2014-07-17T23:56:40.923 回答