簡體   English   中英

紅寶石中的“$”是什么意思?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM