在ruby中,"$,"是什么意思?

6
我在rails源码中发现了这段代码:

# File actionpack/lib/action_view/helpers/output_safety_helper.rb, line 30
def safe_join(array, sep=$,)
  sep ||= "".html_safe
  sep = ERB::Util.html_escape(sep)

  array.map { |i| ERB::Util.html_escape(i) }.join(sep).html_safe
end
$, 是什么意思?我阅读了正则表达式文档,但是没有找到相关内容。
2个回答

6
官方系统变量文档位于:

http://www.ruby-doc.org/stdlib-2.0/libdoc/English/rdoc/English.html

许多Ruby的特殊变量可以通过各种模块和类中的方法进行访问,这隐藏了变量包含值的事实。例如,lineno 可在IO中使用,并被File继承,它是IO流读取的最后一行的行号。它依赖于$/$.
“English”模块提供了加密变量的长版本,使其更易读。在Ruby中,使用加密变量不像在Perl中那样惯用,这就是为什么当你遇到它们时它们更加好奇的原因。
它们来自各种来源:大多数,如果不是全部,都直接来自Perl,但Perl从sed、awk和其余的厨房水槽代码中继承了它们。(它真的是一门伟大的语言。)
还有其他由Regexp等类设置的变量,它定义了用于前置和后置匹配以及捕获的变量。这是来自文档的内容:
$~ is equivalent to ::last_match;
$& contains the complete matched text;
$` contains string before match;
$' contains string after match;
$1, $2 and so on contain text matching first, second, etc capture group;
$+ contains last capture group.

虽然Ruby定义了变量的短、加密版本,但建议我们使用require "English"来提供长名称。这是为了可读性,可以转化为长期易维护性。


5
我最终在这里找到了答案:这里

print的输出字段分隔符。它也是Array#join的默认分隔符。(助记符:在打印语句中有逗号时打印什么。)

以下代码片段显示了效果:

a = [1,2,3]

puts a.join # => 123

$, = ','
puts a.join # => 1,2,3

最后,根据您的发布时间,仅几秒钟后。 - vgoff
是的,没错,我在实际发布问题之前就找到了答案。你可以在提问时一并发布答案。我认为这是一个有价值的补充,因为我在这里找不到这个问题。所以虽然我同时发布了它,但对我来说感觉像是“终于”,因为我搜索了半个小时。 - fabi

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