$/ 在 Ruby 中是什么意思?

What does $/ mean in Ruby?

我在阅读有关 Ruby 序列化 (http://www.skorks.com/2010/04/serializing-and-deserializing-objects-with-ruby/) 的文章时遇到了以下代码。 $/ 是什么意思?我假设 $ 指的是一个对象?

 array = []
 $/="\n\n"
 File.open("/home/alan/tmp/blah.yaml", "r").each do |object|
   array << YAML::load(object)
 end

$/ 是预定义变量。它用作输入记录分隔符,默认值为 "\n".

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

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

所以你必须输入ENTER两次才能结束str的输入。

参考:Pre-defined variables

我在这个页面中发现了一些可能很有趣的东西: http://www.zenspider.com/Languages/Ruby/QuickRef.html#18

$/ # The input record separator (eg #gets). Defaults to newline.

$表示它是一个全局变量。

但是这个很特别,因为它被 Ruby 使用。 Ruby 使用该变量作为输入记录分隔符

有关特殊全局变量的完整列表,请参阅: http://www.rubyist.net/~slagell/ruby/globalvars.html

此代码试图将每个对象读入一个数组元素,因此您需要告诉它一个对象在哪里结束,下一个对象从哪里开始。 $/="\n\n" 行设置了 ruby 用来将文件拆分成的内容。

$/ 被称为 "input record separator" 并且是在您读入文件时用于拆分文件的值。默认情况下,此值设置为新行,因此当您阅读在文件中,每一行都将放入一个数组中。什么设置这个值,你告诉 ruby 一个新行不是中断的结束,而是使用给定的字符串。

例如,如果我有一个逗号分隔的文件,我可以写 $/="," 然后如果我在这样的文件上执行类似您的代码的操作:

foo, bar, magic, space

我会直接创建一个数组,而不必再次拆分:

["foo", " bar", " magic", " space"]

因此您的行将查找两个换行符,并在每组两个而不是每个换行符上拆分。当一行为空时,您只会得到两个换行符。所以这一行告诉Ruby,当读取文件时,在空行处换行而不是每一行。