Ruby Pre-defined variables

Published on:
Tags: ruby

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

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

Comments

comments powered by Disqus