[英]What does “$,” mean in ruby?
我偶然發現了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文檔但我找不到任何相關內容。
我終於在這里找到了答案:
打印的輸出字段分隔符。 此外,它是Array#join的默認分隔符。 (助記符:在您的打印聲明中有打印的內容。)
以下代碼段顯示了效果:
a = [1,2,3]
puts a.join # => 123
$, = ','
puts a.join # => 1,2,3
系統變量的官方文檔位於:
http://www.ruby-doc.org/stdlib-2.0/libdoc/English/rdoc/English.html
許多Ruby的特殊變量可以通過各種模塊和類中的方法訪問,這隱藏了變量包含值的事實。 例如,在IO中可用且由File繼承的lineno
是IO流讀取的最后一行的行號。 它依賴於$/
和$.
“英語”模塊提供了神秘變量的長版本,使其更具可讀性。 隱藏變量的使用在Ruby中並不像在Perl中那樣慣用,這就是為什么當你遇到它們時它們會更加好奇。
它們來自各種各樣的來源:大多數(如果不是全部)都是來自Perl,但Perl從sed,awk和其余的kitchen-sink代碼集繼承了它們。 (這真是一種很棒的語言。)
還有像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"
來提供長名稱。 這是一個可讀性的東西,轉化為長期易於維護的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.