循环中的Ruby布尔赋值运算符

循环中的Ruby布尔赋值运算符,ruby,loops,Ruby,Loops,给定以下代码: File.open('file1.txt', 'r') do |file| while line = file.gets puts "** " + line.chomp.reverse + " **" end end 我搞不懂问的是什么问题?这是我从教程中得到的一段简单代码,它读取文件的行并将其输出。我确实理解其中的大部分内容,我相信您正在为file.get的返回值指定一个变量line,它检索这些行的值并将其输出 我遇到的问题是初始循环语句:whileline=

给定以下代码:

File.open('file1.txt', 'r') do |file|
  while line = file.gets
    puts "** " + line.chomp.reverse + " **"
  end
end
我搞不懂问的是什么问题?这是我从教程中得到的一段简单代码,它读取文件的行并将其输出。我确实理解其中的大部分内容,我相信您正在为
file.get的返回值指定一个变量
line
,它检索这些行的值并将其输出

我遇到的问题是初始循环语句:
whileline=file get

我的问题是,你在问什么样的问题?它是如何打破循环的

i、 e.:
x=3x==3
-->您正在询问的x是否等于3,如果为true,则返回
true
,如果为false,则返回
false


此外,除了将变量
放入while语句中之外,是否同时将
file.get的返回值赋值给变量

在Ruby中,一切都是真实的或虚假的

有两件事是假的:

  • nil
  • false
其他一切都是真实的

while
循环检查
变量的真实性

直到它不是
nil
false
它才循环


在您的示例中,当
file.get
返回
nil
时,循环将停止。这意味着没有下一行。

使用变量
line
作为其条件时,会发生
line=file.get在检查条件时,在
之前分配
。另外,
while
知道如何跳出循环,因为在EOF
file.get
返回
nil
,即
false
-y

Ok,truthy和falsy指的是Ruby将数据类型设置为true还是false?@12个谓词通常返回一个布尔值
true
false
,但这不是必需的,因为当需要布尔值时,除了
false
nil
之外的任何值都像
true
一样工作。意思是
而2
将起作用,以及
而true
而'hello world'
确定,只是为了再次检查,您正在将file.get的值赋给变量行并将其放在while语句中?@12是,这里的赋值运算符优先,所以
while foo=2
实际上计算为
while 2
,这基本上意味着
while true
@12:assignment操作符返回分配的值。这就是为什么可以同时分配一些变量并在条件中测试它。我更喜欢
IO.foreach(“file1.txt”){| line | put“**”+line.chomp.reverse+“**”}
。看见(这通常是写在
File.foreach(…
)中的,因为
File
IO
的一个子类)。