我发现当您想在 Ruby 中逐行读取文件时经常使用以下代码:
while (line = fileobject.gets)
# code block such as 'puts line' or something
end
我只是需要一些帮助来了解那里发生了什么。我知道'while'后面是一个 bool 表达式,然后代码块将重复直到表达式返回'false'。
所以在这里, bool 表达式是 line = fileobject.gets
...但是如何评估它是真还是假?对我来说,它看起来像是一个赋值语句,也就是说,您将“行”指定为文件对象的下一行。
我知道这将适用于逐行读取文本文件,但在我知道它为什么有效之前我不太愿意使用它。也许我只是太习惯了 C++ 的计数器和递增。 谢谢!
最佳答案
帮助您理解这一点的第一个原则是,在 Ruby 中,条件不只是 true 或 false,它们可以是任何值。然后该值被认为是“真实的”或“虚假的” - 即 - 就像是真实的一样是假的。在 Ruby 中,只有两个值是假的(表现得像假的):false
itself and nil
.
例如:
if nil # nil is 'falsey'
# Won't go here!
else
# Will go here!
end
if 'randomstring' # any string is 'truthy'
# will go here!
end
这个想法同样适用于 while 循环。
接下来是 gets
method.如果查看文档,您会看到 IO::gets
方法在到达文件末尾时返回 nil
。因此,当发生这种情况时,line
被设置为 nil
,这是一个 fasley 值,然后循环退出。
简短版本:nil
类似于 false
并且 gets
在到达文件末尾时返回 nil
.
关于ruby - 使用 while 循环从 Ruby 中的文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25298263/