概要
事前定義変数について
詳細
Rubyで事前に定義されている定数は以下。
カテゴリ | 変数名 | 内容 |
---|---|---|
例外 | $! | raiseされた例外 |
例外 | $@ | スタックトレース |
パターンマッチ | $& | パターンマッチ全体 |
パターンマッチ | $+ | マッチしたグループのうち、最後のもの |
パターンマッチ | $` | マッチした箇所より前 |
パターンマッチ | $' | マッチした箇所より後 |
パターンマッチ | $n | nは数値。マッチしたグループ |
入出力変数 | $/ | 入力レコードの区切り文字。デフォルトは\n |
入出力変数 | $\ | printなどの頭に追加される文字列。デフォルトはnil |
入出力変数 | $, | Kernel#printやArray#joinの引数間の文字。デフォルトはnil |
入出力変数 | $. | 現在の入力ファイルから最後に読み込んだ行 |
入出力変数 | $; | splitのデフォルト区切り文字。デフォルトはnil |
入出力変数 | $ | 標準入力から受け取ったファイル全体 |
入出力変数 | $> | printやprintfの出力先。デフォルトはSTDOUT |
入出力変数 | $_ | Kernel#print,Kernel#readlineで読み取られた最後の行 |
入出力変数 | $stdin | 現在の標準入力 |
入出力変数 | $stdout | 現在の標準出力 |
入出力変数 | $stderr | 現在の標準エラー |
サンプルコード
# encoding: UTF-8 require_relative "../open_classes.rb" require 'pp' def error_test(number, devide) begin number/devide rescue ZeroDivisionError print_eval "$!" print_eval "$@" end end puts "** error test **" error_test 1,0 def match_test() "hg hage hige hoge" =~ /(hage)\s(hige)/ print_eval "$&", binding print_eval "$+", binding print_eval "$`", binding print_eval "$'", binding print_eval "$1", binding print_eval "$2", binding print_eval "$3", binding print_eval "pp $~", binding end puts "----------------------------------------------------------" puts "** match test **" match_test puts "----------------------------------------------------------" puts "** io parameter test **" print_eval "p $/" print_eval "p $\\" $\ = "output:" print_eval "p $\\" print_eval %Q|puts "test"| $\ = nil print "hage","hige","hoge","\n" $, = "|" print "hage","hige","hoge","\n" print_eval "p $;" $; = "," print_eval %Q|"hoge,hige,hage".split.size| $; = nil print_eval "p $<" print_eval "p $>" print_eval "p $_" print_eval "p $stdin" print_eval "p $stdout" print_eval "p $stderr" puts "----------------------------------------------------------" puts "** runtime test **" print_eval "p $0"
出力
** error test ** ($!) => divided by 0 ($@) => C:/xxx/pre_reserve_word1.rb:7:in `/' C:/xxx/pre_reserve_word1.rb:7:in `error_test' C:/xxx/pre_reserve_word1.rb:15:in `<main>' ---------------------------------------------------------- ** match test ** ($&) => hage hige ($+) => hige ($`) => hg ($') => hoge ($1) => hage ($2) => hige ($3) => (pp $~) => #<MatchData "hage hige" 1:"hage" 2:"hige"> hage hige ---------------------------------------------------------- ** io parameter test ** (p $/) => "\n" (p $\) => nil (p $\) => output:"output:" output: (puts "test") => output:test hagehigehoge hage|hige|hoge| (p $;) => nil ("hoge,hige,hage".split.size) => 3 (p $<) => ARGF ARGF (p $>) => #<IO:<STDOUT>> #<IO:0x25d5140> (p $_) => nil (p $stdin) => #<IO:<STDIN>> #<IO:0x25d5188> (p $stdout) => #<IO:<STDOUT>> #<IO:0x25d5140> (p $stderr) => #<IO:<STDERR>> #<IO:0x25d50f8>