亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby 中$開頭的全局變量、內部變量、隱藏變量介紹

2020-10-29 19:46:09
字體:
來源:轉載
供稿:網友

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 $! end
this 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 a
NameError-: -undefined local variable or method `a' for main:Object-
mooooooo        from (irb):25
        from /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? }
true
true
true
true
true
=> #<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 Why
Who
What
When
Where
and
Why

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女免费视频| 国产成人97精品免费看片| 久久精品国产欧美激情| 9.1国产丝袜在线观看| 欧美电影免费观看大全| 国产拍精品一二三| 欧美日本中文字幕| 亚洲日本欧美日韩高观看| 国产成人综合久久| 欧美日产国产成人免费图片| 久久精品成人欧美大片古装| 欧美xxxwww| 久久免费成人精品视频| 久久免费视频在线观看| 欧美一级电影久久| 国产一区二区黑人欧美xxxx| 国产精品无av码在线观看| 97免费中文视频在线观看| 亚洲福利视频二区| 91免费看视频.| 国产精品成av人在线视午夜片| 国产日韩欧美夫妻视频在线观看| 理论片在线不卡免费观看| 91精品国产综合久久男男| 亚洲片在线资源| 国产一区二区欧美日韩| 欧美一区第一页| 日韩电影中文 亚洲精品乱码| 成人网在线观看| 亚洲成av人片在线观看香蕉| 久久久免费av| 欧美日韩中文字幕在线| 久久精品国产成人精品| 成人国产精品色哟哟| 国内精品久久久久久久| 亚洲精品mp4| 欧美日韩性视频在线| 欧美诱惑福利视频| 国产成+人+综合+亚洲欧美丁香花| 亚洲无av在线中文字幕| 这里只有精品久久| 欧美日韩国产中文精品字幕自在自线| 亚洲黄色av网站| 精品久久在线播放| 91免费看视频.| 亚洲少妇中文在线| 日本精品久久中文字幕佐佐木| 成人黄色片网站| 亚洲免费一级电影| 8x海外华人永久免费日韩内陆视频| 国产精品久久久久久久电影| 亚洲有声小说3d| 青青a在线精品免费观看| 国产精品va在线播放我和闺蜜| 中文字幕精品一区二区精品| 国产精品久久久久免费a∨大胸| 亚洲第一中文字幕| 亚洲人成啪啪网站| 在线性视频日韩欧美| 亚洲精品理论电影| 亚洲欧美中文日韩在线v日本| 亚洲福利影片在线| 一区二区三区四区视频| 91av在线视频观看| 一本色道久久综合狠狠躁篇的优点| 日韩专区中文字幕| 欧美在线视频免费观看| 45www国产精品网站| 精品久久香蕉国产线看观看gif| 国产成人a亚洲精品| 欧美成人免费一级人片100| 久久免费视频这里只有精品| 亚洲国产精品视频在线观看| 66m—66摸成人免费视频| 欧洲s码亚洲m码精品一区| 国产成人拍精品视频午夜网站| 日韩欧美在线播放| 中文字幕亚洲欧美| 亚洲精品av在线| 这里只有视频精品| 日日摸夜夜添一区| 精品美女久久久久久免费| 色爱av美腿丝袜综合粉嫩av| 不卡av电影院| 久青草国产97香蕉在线视频| 欧美激情第99页| 日韩精品中文字| 日本精品视频在线观看| 日韩中文字幕视频在线观看| 欧美猛交ⅹxxx乱大交视频| 日韩高清av一区二区三区| 国产亚洲欧美一区| 青青精品视频播放| www欧美日韩| 成人福利在线观看| 亚洲天堂av在线免费观看| 国产精品视频免费在线观看| 亚洲xxx大片| 日韩欧美国产黄色| 亚洲激情小视频| 国产午夜精品麻豆| 亚洲天堂视频在线观看| 色悠久久久久综合先锋影音下载| 亚洲女人被黑人巨大进入| 久久久久国产精品免费| 国产欧美日韩最新| 日韩精品在线观看网站| 久久手机免费视频| 久久国产精品99国产精| 日韩欧美成人网| 欧美性xxxxxxx| 日本不卡视频在线播放| 中文字幕亚洲一区| 97成人超碰免| 俺也去精品视频在线观看| 在线观看国产精品日韩av| 国产日韩在线看| 亚洲激情电影中文字幕| 日韩综合视频在线观看| 国产日本欧美在线观看| 欧美精品国产精品日韩精品| 一区二区三区久久精品| 一色桃子一区二区| 国产精品久久久亚洲| 91极品视频在线| 亚洲精品动漫100p| 久久理论片午夜琪琪电影网| 国产九九精品视频| 热久久视久久精品18亚洲精品| 色综合视频网站| 国产欧洲精品视频| 亚洲国产精品视频在线观看| 亚洲曰本av电影| 精品亚洲一区二区三区在线观看| 97国产真实伦对白精彩视频8| 亚洲韩国日本中文字幕| 欧美成人亚洲成人日韩成人| 欧美激情精品久久久久久蜜臀| 在线视频欧美日韩精品| 中文字幕日韩有码| 欧美精品激情在线观看| 91亚洲精品久久久久久久久久久久| 狠狠干狠狠久久| 91po在线观看91精品国产性色| 国产精品久久av| 亚洲色图第三页| 国产在线999| 91牛牛免费视频| 96精品久久久久中文字幕| 亚洲欧美国内爽妇网| 国产一区二区黑人欧美xxxx| 精品久久久91| 精品一区二区三区四区在线| 91av在线影院| 免费不卡欧美自拍视频| 国产一区二区三区欧美| 久久不射电影网| 在线观看中文字幕亚洲| 国产精品视频网站| 国模极品一区二区三区| 亚洲一区二区三区乱码aⅴ| 日韩在线播放av| 欧美在线一区二区视频| 国产精品对白刺激|