我在 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
$,
有什么作用?我读了Regexp-documentation但我找不到任何相关信息。
最佳答案
系统变量的官方文档在:
http://www.ruby-doc.org/stdlib-2.0/libdoc/English/rdoc/English.html
许多 Ruby 的特殊变量都可以通过各种模块和类中的方法访问,这隐藏了变量是包含值的事实。例如,lineno
,在 IO 中可用并由 File 继承,是 IO 流读取的最后一行的行号。它依赖于 $/
和 $.
“英语”模块提供了隐含变量的长版本,使其更具可读性。隐变量的使用在 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"
来提供长名称。它具有可读性,可以转化为长期易于维护的东西。
关于ruby - "$,"在 ruby 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16817589/