Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby while循环语句中的布尔值,而不是;而真正的“做”;不';行不通_Ruby - Fatal编程技术网

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,谢谢!这是非常重要的一点。我编辑了答案,现在它只包含对代码进行一般简化的建议。