Ruby中的$/是什么意思?

6

1
那段代码很糟糕。只需切换到 IO.foreach 就会有很大的改进: File.foreach("/home/alan/tmp/blah.yaml", "\n\n") do |object|。这不使用(晦涩)的全局变量,也会关闭文件。 - cremno
1
这不是nominated exemplar的重复:那个问题是关于如何在Ruby中使用全局变量,但这个问题是关于特定预定义全局变量的含义。 - Wayne Conrad
4个回答

10

$/是预定义变量,用于作为输入记录分隔符,并具有默认值"\n"

gets这样的函数使用$/来确定如何分隔输入。例如:

$/="\n\n"
str = gets
puts str

所以你需要输入ENTER键两次来结束str的输入。

参考资料:预定义变量


2
这段代码试图将每个对象读入数组元素,所以您需要告诉它一个对象的结束和下一个对象的开始。行$/="\n\n"是设置Ruby用于分割文件的值。 $/被称为“输入记录分隔符”,并且是在读取文件时用于拆分文件的值。默认情况下,此值设置为新行,因此当您读取文件时,每行都将放入数组中。通过设置此值,您正在告诉Ruby一个新行不是断点的结尾,而是使用给定的字符串。
例如,如果我有一个逗号分隔的文件,我可以编写$/=",",然后如果我在这样的文件上执行您的代码:
foo, bar, magic, space

我会直接创建一个数组,而不必再次拆分:
["foo", " bar", " magic", " space"]

因此,你的代码将寻找两个换行符,并在每组两个换行符而不是每个换行符上进行分割。只有当一行为空时,你才会得到两个连续的换行符。所以这行代码告诉Ruby,在读取文件时,要在空行处中断,而不是在每一行处中断。


1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接