循环中的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
知道如何跳出循环,因为在EOFfile.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
的一个子类)。