麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Ruby > 正文

Ruby 中$開(kāi)頭的全局變量、內(nèi)部變量、隱藏變量介紹

2020-10-29 19:46:09
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Ruby 中充滿了一系列的隱藏變量,我們可以從這些預(yù)定義的全局變量中獲取一些有意思的信息。

全局進(jìn)程變量

$$ 表示當(dāng)前運(yùn)行的 ruby 進(jìn)程。

復(fù)制代碼 代碼如下:
>> $$
=> 17170

我們可以從當(dāng)前進(jìn)程殺死它自己
復(fù)制代碼 代碼如下:

>> `kill -9 #{$$}`
[1]    17170 killed     irb

$? 表示最近一個(gè)子進(jìn)程的狀態(tài)
復(fù)制代碼 代碼如下:

>> `echo hello`
=> "hello/n"
>> $?
=> #<Process::Status: pid 18048 exit 0>
>> $?.success?
=> true

異常和錯(cuò)誤

$1 表示引起異常的信息。比如在這里 raise "there's no peanut butter",它的值就是 there's no peanut butter。

復(fù)制代碼 代碼如下:

>> 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

$@ 可以給出完整的引起錯(cuò)誤的棧調(diào)用信息,它是一個(gè)數(shù)組。
復(fù)制代碼 代碼如下:

>> begin raise 'no soup in kitchen' rescue [email protected] { |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 里的分隔符,默認(rèn)是空格。

復(fù)制代碼 代碼如下:

>> "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 里,默認(rèn)是 nil。

>> ['one', 'two', 'three', 'green'].join
=> "onetwothreegreen"
>> $, = "-"
=> "-"
>> ['one', 'two', 'three', 'green'].join
=> "one-two-three-green"


$/ 表述讀取輸入的行分隔符。它被用在 Kernel.gets 里。它通常表示新行,但可以被修改。這個(gè)很難展示,因?yàn)?irb 依賴 /n 作為讀取分隔符,如果把 $/ 設(shè)置成 nil,gets 就會(huì)讀取整個(gè)文件。

$/ 正好相反,它是作為輸出的行分隔符。

復(fù)制代碼 代碼如下:

>> $/ = "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

文件

假設(shè)有個(gè)叫l(wèi)etter.text的文件:

復(fù)制代碼 代碼如下:

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


$. 表示文件當(dāng)前被讀取的行號(hào)。
復(fù)制代碼 代碼如下:

>> 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>

$_ 表示最后讀取的行。
復(fù)制代碼 代碼如下:

>> open('letter.txt').each { |line| puts $_.nil? }
true
true
true
true
true
=> #<File:letter.txt>

匹配和正則表達(dá)式

$~ 表示最近一次正則匹配到的信息,如果有的話它就返回 MatchData 的示例,否則就是 nil。

復(fù)制代碼 代碼如下:

>> "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
>> $~

$& 跟 $~ 非常相似,它返回最近一次匹配到的字符串。
復(fù)制代碼 代碼如下:

>> "the robots are coming, the robots are coming, the robots are coming" =~ /ro/
=> 4
>> $&

$' 表示匹配不分后面的字符串。
復(fù)制代碼 代碼如下:

>> "There were once ten tin robots standing in a row." =~ /robot/
=> 24
>> $'
=> "s standing in a row."
=> "ro"
=> nil

其他

$> 表示ruby 默認(rèn)的輸出對(duì)象,用在 Kernel.print 里。

復(fù)制代碼 代碼如下:

>> $> =  $> = $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 文件的所有變量的數(shù)組,假設(shè)有個(gè)叫 argument_echoer.rb 文件:
復(fù)制代碼 代碼如下:

$*.each { |arg| puts arg }

運(yùn)行它:
復(fù)制代碼 代碼如下:

$ ruby argument_echoer.rb Who What When Where and Why
Who
What
When
Where
and
Why

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美国产精品久久 | 精精国产xxxx视频在线野外 | 一级国产精品一级国产精品片 | 99精品视频在线免费观看 | 久久久久久亚洲国产精品 | 在线播放亚洲精品 | 欧美激情性色生活片在线观看 | 国产精品久久久久久婷婷天堂 | 刘亦菲一区二区三区免费看 | 日韩精品a在线观看 | 黄色特级一级片 | 国产在线一区二区三区 | 双性帝王调教跪撅打屁股 | 在线a毛片免费视频观看 | 法国性hdfreexxxx人妖 | 黄网站在线播放视频免费观看 | 偷偷草网站 | 国产精品99久久久久久大便 | 成人免费入口 | 中韩毛片 | 成人在线视频网 | 国产成人精品无人区一区 | 欧美ab| 国产免费视频一区二区裸体 | 成人免费看片a | 精品亚洲午夜久久久久91 | 免费人成年短视频在线观看网站 | 国产精品剧情一区二区三区 | 亚洲综合视频网 | 日本在线播放一区二区 | 亚洲国产精品500在线观看 | 国产精品久久久久久久久久尿 | 性欧美日本| 国产精品视频1区 | 精精国产xxxx视频在线播放7 | 欧美三区在线 | 免费毛片视频播放 | 色交视频| 精品国产一区二区三区成人影院 | 国产免费观看a大片的网站 欧美成人一级 | 欧美自拍|