Ruby while循环语句中的布尔值,而不是;而真正的“做”;不';行不通
我尝试使用设置为布尔值Ruby while循环语句中的布尔值,而不是;而真正的“做”;不';行不通,ruby,Ruby,我尝试使用设置为布尔值true的变量创建一个循环。如果用户输入“exit”,我希望值变为false,并且下一次迭代不会发生,因为while语句“isTrue==true”不再是true isTrue = true while isTrue == true do input = gets if input == "exit" then # exitと入力されたら isTrue = false # プログラムを終了 else puts "LOO
true
的变量创建一个循环。如果用户输入“exit”
,我希望值变为false
,并且下一次迭代不会发生,因为while
语句“isTrue==true”
不再是true
isTrue = true
while isTrue == true do
input = gets
if input == "exit" then # exitと入力されたら
isTrue = false # プログラムを終了
else
puts "LOOPING..."
end
end
puts "ENDING NOW"
但它似乎不起作用,只是不断循环。为什么我的代码不起作用
[1] pry(main)> input = gets
exit
=> "exit\n"
[2] pry(main)>
这是因为获取
输入将包含一个\n
。你需要处理它
像这样:
[2] pry(main)> input.chomp
=> "exit"
通常ppl是这样写的:
[3] pry(main)> input = gets.chomp
exit
=> "exit"
使用
gets.chomp
而不是gets
来删除拖尾“\n”,它将起作用。因此,您不会处理来自gets的“退出\n”
rstrip
将在这种情况下帮助您
您的输入实际上并不完全是“退出”,因为您按下了返回按钮
下面的代码将起作用
isTrue = true
while isTrue == true do
input = gets
if input.rstrip == "exit" then # exitと入力されたら
isTrue = false # プログラムを終了
else
puts "LOOPING..."
end
end
puts "ENDING NOW"
请参阅-您的程序可以更加紧凑:
while gets.chomp != 'exit' do
puts 'LOOPING...'
end
puts 'ENDING NOW'
这个版本的程序和你的完全一样,但是更小更快
祝你学习Ruby好运 好吧,那么你是新来的,但是超级!如果用户键入“退出”并按enter键,
input
将等于exit\n“
,因此input
将永远不等于“exit”
。您需要写入input=get.chomp
,呃,将换行符“\n”
。您可以在“input=get”之后添加“p input”“。您将能够自己找出错误。由于p
返回其参数,因此您可以在p(…)
中包装几乎任何表达式,以检查其值,而无需更改程序的行为,例如p(input=get)
或input=p(get)
或如果p(input)=“exit”,则
。在许多情况下,您甚至可以省略括号,只需在前面加上一个p
,即p input=gets
除了按“回车”键之外,还有其他方法可以结束输入,因此您可能不会总是有一个结尾\n
@Stefan,谢谢!这是非常重要的一点。我编辑了答案,现在它只包含对代码进行一般简化的建议。