Ruby 中$開頭的全局變數、內部變數、隱藏變數介紹
来源:互联网 发布:装修监理必知 编辑:程序博客网 时间:2024/05/01 13:31
Ruby 中$開頭的全局變數、內部變數、隱藏變數介紹
ruby
Ruby 中充滿了一系列的隱藏變數,我們可以從這些預定義的全局變數中獲取一些有意思的信息。
全局進程變數
$$ 表示當前運行的 ruby 進程。
>> $$=> 17170
我們可以從當前進程殺死它自己
>> `kill -9 #{$$}`[1] 17170 killed irb
$? 表示最近一個子進程的狀態
>> `echo hello`=> "hello\n">> $?=> #<Process::Status: pid 18048 exit 0>>> $?.success?=> true
異常和錯誤
$1 表示引起異常的信息。比如在這裡 raise "there's no peanut butter",它的值就是 there's no peanut butter。
>> begin raise "this town ain't big enough for the both of us" rescue puts $! endthis town ain't big enough for the both of us=> nil
$@ 可以給出完整的引起錯誤的棧調用信息,它是一個數組。
>> begin raise 'no soup in kitchen' rescue $@.each { |trace| puts trace } end(irb):13:in `irb_binding'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/workspace.rb:80:in `eval'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/workspace.rb:80:in `evaluate'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/context.rb:254:in `evaluate'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:159:in `block (2 levels) in eval_input'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:273:in `signal_status'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:156:in `block in eval_input'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:155:in `eval_input'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:70:in `block in start'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:69:in `catch'/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:69:in `start'/home/meck/.rvm/rubies/ruby-1.9.3-p194/bin/>>'=> ["(>>'"]
字元串和分隔符
$; 表示 String.split 里的分隔符,默認是空格。
>> "One Spaceship, Two Tiny Tanks, Three Misplaced Socks".split=> ["One Spaceship", " Two Tiny Tanks", " Three Misplaced Socks"]>> $; = ","=> ",">> "One Spaceship, Two Tiny Tanks, Three Misplaced Socks".split=> ["One Spaceship", " Two Tiny Tanks", " Three Misplaced Socks"]$, 用在 Array.join 和 Kernel.print 里,默認是 nil。>> ['one', 'two', 'three', 'green'].join=> "onetwothreegreen">> $, = "-"=> "-">> ['one', 'two', 'three', 'green'].join=> "one-two-three-green"
$/ 表述讀取輸入的行分隔符。它被用在 Kernel.gets 里。它通常表示新行,但可以被修改。這個很難展示,因為 irb 依賴 \n 作為讀取分隔符,如果把 $/ 設置成 nil,gets 就會讀取整個文件。
$\ 正好相反,它是作為輸出的行分隔符。
>> $\ = "mooooooo "=> "mooooooo ">> puts aNameError-: -undefined local variable or method `a' for main:Object-mooooooo from (irb):25from /home/meck/.rvm/rubies/ruby-1.9.3-p194/bin/>>'-mooooooo >> a
文件
假設有個叫letter.text的文件:
Dear Caroline,I think we need some honey for tea.I also think that I may have misplaced my red tie, have you seen it?-Nick
$. 表示文件當前被讀取的行號。
>> open('letter.txt').each { |line| puts "#{$.}: #{line}" }1: Dear Caroline,2: I think we need some honey for tea.3: I also think that I may have misplaced my red tie, have you seen it?4:5: -Nick=> #<File:letter.txt>
$_ 表示最後讀取的行。
>> open('letter.txt').each { |line| puts $_.nil? }truetruetruetruetrue=> #<File:letter.txt>
匹配和正則表達式
$~ 表示最近一次正則匹配到的信息,如果有的話它就返回 MatchData 的示例,否則就是 nil。
>> "the robots are coming, the robots are coming, the robots are coming" =~ /ro/=> 4>> $~=> #<MatchData "ro">>> $~.to_s=> "ro">> "the robots are coming, the robots are coming, the robots are coming" =~ /cats/=> nil>> $~
$& 跟 $~ 非常相似,它返回最近一次匹配到的字元串。
>> "the robots are coming, the robots are coming, the robots are coming" =~ /ro/=> 4>> $&
$' 表示匹配不分後面的字元串。
>> "There were once ten tin robots standing in a row." =~ /robot/=> 24>> $'=> "s standing in a row."=> "ro"=> nil
其他
$> 表示ruby 默認的輸出對象,用在 Kernel.print 里。
>> $> = $> = $stderr=> #<IO:<STDERR>>>> puts 'no no no'no no no=> nil>> $> = $stdin/home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:168:in `write': not opened for writing (IOError)from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:168:in `print'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:168:in `block (2 levels) in eval_input'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:273:in `signal_status'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:156:in `block in eval_input'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:243:in `block (2 levels) in each_top_level_statement'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_statement'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:155:in `eval_input'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:70:in `block in start'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:69:in `catch'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/irb.rb:69:in `start'from /home/meck/.rvm/rubies/ruby-1.9.3-p194/bin/irb:12:in `<main>'
$* 可能是最常用全局變數,它表示包含傳給 ruby 文件的所有變數的數組,假設有個叫 argument_echoer.rb 文件:
$*.each { |arg| puts arg }
運行它:
$ ruby argument_echoer.rb Who What When Where and WhyWhoWhatWhenWhereandWhy
0 0
- Ruby 中$開頭的全局變數、內部變數、隱藏變數介紹
- 解析 ruby 全局變數
- Ruby 中类的含义
- Ruby 中变量的初始化
- [Ruby] 中define_method 的使用
- ruby中Class的allocate
- Ruby中有意思的块
- VC++中全局变量、全局常量、全局结构体的定义
- VC++中全局变量、全局常量、全局结构体的定义
- ruby 局部變數
- Ruby中%的用法(百分号的用法)
- MFC中获得全局指针的方法
- 网络游戏服务器中全局广播的优化
- MFC 中有关全局的定义
- oracle 集群中全局对象的查询
- android中共享全局数据的方法
- c++中全局的 const 使用问题
- Vi中个的全局替换命令
- Ruby 中一些百分號(%)的用法小結
- rails上傳圖片代碼實例
- VBA第6课 循环判断数据
- APM半实物仿真
- mysql学习笔记之十六(数据库维护)
- Ruby 中$開頭的全局變數、內部變數、隱藏變數介紹
- 数组-13. 螺旋方阵(20)
- 变态跳台阶
- 在TCP/IP网络中,为各种公共服务保留的端口号范围
- Ruby self在不同環境的含義
- ruby 雜項
- Ruby中使用Block、Proc、lambda實現閉包
- Android Studio 1.2正式版发布,要如何更新? Please check network connection and try again.
- nyoj27 水池数目