如何停止这个在Ruby中被错误初始化的方法?

如何停止这个在Ruby中被错误初始化的方法?,ruby,if-statement,methods,Ruby,If Statement,Methods,如果。。。else循环,逻辑上是正确的(我认为),但即使我输入“N”(表示否),它仍然会调用代码块 这是我的密码: print "\n" def reversal puts "Hello! Let's reverse your name! (Avoid capitals!)\n" name = gets.chomp puts "YOUR REVERSED NAME IS!!\n"+name.reverse+"\n\n(Press enter to continue)" inpu

如果。。。else循环,逻辑上是正确的(我认为),但即使我输入“N”(表示否),它仍然会调用代码块

这是我的密码:

print "\n"

def reversal
  puts "Hello! Let's reverse your name! (Avoid capitals!)\n"
  name = gets.chomp
  puts "YOUR REVERSED NAME IS!!\n"+name.reverse+"\n\n(Press enter to continue)"
  input = gets.chomp
  print "So, did you like it? Y or N!\n"
  feedback = gets.chomp
end

reversal

if feedback = "Y" || feedback = "y" || feedback = "Yes" || feedback = "YES" || feedback = "yes"
  puts "Cool! Would you like to try again? Y or N!\n"
  nestedfeedback = gets.chomp

  if nestedfeedback = "Y" || nestedfeedback = "y" || nestedfeedback = "Yes" || nestedfeedback = "yes" || nestedfeedback = "YES"
    reversal
  end
else
  puts "I'm sorry for that..."
end
我在这里附加了一张发生了什么的图片(我输入N,但代码块/方法仍被调用):


feedback=get.chomp
将定义一个局部变量,该变量仅在
reversion
中可见。当您在
反转
之外测试它时,它将是
nil
,因为它尚未在该上下文中定义

另外,
if feedback=“Y”…
反馈定义为
“Y”
,而不是测试它是否是。由于
“Y”
和所有其他变体都是真实的,因此
if
将始终成功

您可以做的许多事情包括:

  • 使用
    反馈
    是来自
    反转
    的返回值这一事实,并在主代码中使用它,而不是普通的
    反转

    feedback = reversal
    
  • 使用
    if
    中的
    ==
    测试变量


    • 你为什么不提供反馈

      feedback.downcase!
      

      这样你就不必担心案例。

      那么我应该使用什么:
      如果反馈=Y'
      或者
      如果反馈=Y'
      或者
      如果反馈=Y
      ?第一个将
      'Y'
      分配给反馈。第二个将测试
      反馈
      是否为
      “Y”
      。第三个将尝试查看变量
      feedback
      的值是否与常数
      Y
      的值相同,这是您尚未定义的,并且会给您一个错误。我是否可以在整个代码的开头加上$feedback=“No”?这将使其成为一个全局变量,您必须在整个代码中编写
      $feedback
      ,而不是
      feedback
      。而且,全局变量有点危险,最好不要习惯它们。但是,为了回答您的问题,这确实是“您可以做的许多事情”中的另一个。当我在顶部声明它时,我是否应该做
      $feedback
      $feedback.downcase
      ?或者我必须在所有地方添加它吗?如果你这样做的话。downcase!你不必重复。它将保持冷静。