Bear Su's Blog

Ruby Pre-defined variables

圖片來源 フリー写真素材ぱくたそ

ruby 本身有先定義了一些變數與常數

可以用在取得系統資訊,或是除錯上

有些變數可以使得在開發時少打一些程式碼,但相對的可讀性可能就會降低一些(不是所有人都熟悉符號的意義)

這裡紀錄一些我覺得值得一提的部分

正規表示式比對


變數名稱說明
$~最後比對到的結果,MatchData 類別
$&完整比對到的字串
$`比對到的字串之前的字串
$'比對到的字串之後的字串
$1, $2, …比對到的群組,這裡是從 1 開始
$+最後比對到的群組

例子:

# 比對字串
> /b(c)(d)e/ =~ "abcdef"
=> 1

# 最後比對到的結果
> $~
=> #<MatchData "bcde" 1:"c" 2:"d">

# 完整比對到的字串
> $&
=> "bcde"

# 比對到的字串之前的字串
> $`
=> "a"

# 比對到的字串之後的字串
> $'
=> "f"

# 比對到的群組
> $1
=> "c"
> $2
=> "d"
> $3
=> nil

# 最後比對到的群組
> $+
=> "d"

檔案相關


$0 是目前執行 ruby 的檔案名稱,假設用 irb 印出 $0

> $0
=> "irb"

若是執行 test.rb

bash$ echo 'puts $0' > test.rb
bash$ ruby test.rb
test.rb

DATA 這個比較常用到在 pure ruby script,它是用來取得在檔案 __END__ 以下的字串

# test.rb

# 注意 DATA 是 File 類別,所以可以用 `read` 取得內容
puts DATA.read

__END__
I have a pen.
I have an apple.

執行 ruby test.rb

bash$ ruby test.rb
I have a pen.
I have an apple.

ENV 這個有用 rails 的開發者應該不陌生,可以用來取得環境變數

錯誤


$! 取得最後 raise 的 Exception 訊息

$@ 取得最後的 Exception 錯誤推疊陣列

# test.rb

begin
  raise StandardError.new "Mayday"
rescue => e
  puts $!
  puts $@
end

執行 ruby test.rb

bash$ ruby test.rb
Mayday
test.rb:2:in `<main>'

參考


ruby-doc globals_rdoc ruby-doc Regexp


如果覺得這篇文章對您有所幫助,歡迎贊助我一杯咖啡 ☕️

祝您有美好的一天 ❤️