如何停止这个在Ruby中被错误初始化的方法?
如果。。。else循环,逻辑上是正确的(我认为),但即使我输入“N”(表示否),它仍然会调用代码块 这是我的密码:如何停止这个在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
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!你不必重复。它将保持冷静。