【问题标题】:What does $/ mean in Ruby?Ruby 中的 $/ 是什么意思?
【发布时间】:2016-09-17 18:57:52
【问题描述】:

我在阅读有关 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

【问题讨论】:

  • 顺便说一句,那是糟糕的代码。只需切换到IO.foreach 将是一个重大改进:File.foreach("/home/alan/tmp/blah.yaml", "\n\n") do |object|。这不使用(模糊的)全局变量,并且还关闭了文件。
  • 这不是nominated exemplar的重复:那个问题是关于如何在Ruby中使用全局变量,但是这个问题是关于一个特定的预定义全局变量的含义。

标签: ruby syntax operator-keyword


【解决方案1】:

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

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

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

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

参考:Pre-defined variables

【讨论】:

    【解决方案2】:

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

    $/ 被称为“输入记录分隔符”,是读取文件时用于分割文件的值。默认情况下,此值设置为新行,因此当您读取文件时,每一行都将被放入一个数组中。什么设置这个值,你告诉 ruby​​ 一个新行不是中断的结束,而是使用给定的字符串。

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

    foo, bar, magic, space
    

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

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

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

    【讨论】:

      【解决方案3】:

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

      $/ # 输入记录分隔符(例如#gets)。默认为换行符。

      【讨论】:

        【解决方案4】:

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

        然而,这个是特殊的,因为它被 Ruby 使用。 Ruby 使用该变量作为输入记录分隔符

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

        【讨论】:

          猜你喜欢
          • 2011-04-18
          • 2016-08-17
          • 2021-11-10
          • 2011-01-11
          • 2011-10-14
          • 2014-06-21
          • 2010-09-18
          • 2011-08-18
          • 1970-01-01
          相关资源
          最近更新 更多