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

首頁 > 編程 > Ruby > 正文

Ruby編程的21個小技巧介紹

2020-02-24 15:41:13
字體:
來源:轉載
供稿:網友

本篇文章主要講Ruby編程的21個小技巧介紹,有些代碼小編也不太理解,很多是在網上借鑒其他人的。

1. 快速獲取正則表達式的匹配值

通常我們使用正則表達式,都是先match,然后再取結果,但是這樣有時候會拋異常,看下面例子:

?


email = "Fred Bloggs "

?

email.match(//)[1] # => "fred@bloggs.com"

email[//, 1] # => "fred@bloggs.com"

email.match(/(x)/)[1] # => NoMethodError [:(]

email[/(x)/, 1] # => nil

email[/([bcd]).*?([fgh])/, 2] # => "g"

?

上面例子中還有一種更簡單的方法,就是使用 String#[]方法,可以直接匹配正則表達式,更簡潔,雖然看起來使用了魔鬼數字。
當然你可以省略掉那個魔鬼數字,如果僅匹配一次的話:

?


x = 'this is a test'

?

x[/[aeiou].+?[aeiou]/] # => 'is i'

?

這個例子中,我們匹配規則“先匹配一個元音,然后一個輔音,再接著一個元音”。

2. Array#join!的快捷實現

我們知道Array的*操作,是將數組里面的元素成倍的增加:

?


[1, 2, 3] * 3 == [1, 2, 3, 1, 2, 3, 1, 2, 3]

?

但是當乘因子不是數字是字符串會出現什么效果?

?


%w{this is a test} * ", " # => "this, is, a, test"

?

h = { :name => "Fred", :age => 77 }

h.map { |i| i * "=" } * "n" # => "age=77nname=Fred"

?

對了,這就是join!的效果。因此可以用這種方式來快捷地實現join!操作。

3. 快速格式化十進制數字

格式化浮點數字的精度顯示通常使用sprintf這個函數,可是有一種更快捷的方式,使用字符串。

?


money = 9.5

?

"%.2f" % money # => "9.50"

?

4. 快速解析字符串

在技巧3中我們看到了數字的格式化,這里就說一下字符串格式的快捷方式。

?


"[%s]" % "same old drag" # => "[same old drag]"

?

這里的意思是將”same old drag”顯示到[]中。
我們再看一下具體的格式化方法:

?


x = %w{p hello p}

?

"%s" % x # => "

hello

?

5. 遞歸刪除文件和目錄

FileUtils提供了這種方法:

?


require 'fileutils'

?

FileUtils.rm_r 'somedir'

?

還有一個方法是FileUtils.rm_rf,與linux上的 rm -rf 對應。

6. 快速窮舉可枚舉對象

使用*操作可以快速的窮舉出可枚舉對象中的所有元素,像Array,Hash這種對象。

?


a = %w{a b}

?

b = %w{c d}

[a + b]????????????????????????????? # => [["a", "b", "c", "d"]]

[*a + b]???????????????????????????? # => ["a", "b", "c", "d"]

?

這里*操作符的優先級低于+操作符。

?


a = { :name => "Fred", :age => 93 }

?

[a]????????????????????????????????? # => [{:name => "Fred", :age =>93}]

[*a]???????????????????????????????? # => [[:name, "Fred"], [:age, 93]]

?


a = %w{a b c d e f g h}

b = [0, 5, 6]

a.values_at(*b).inspect????????????? # => ["a", "f", "g"]

?

7. 消除臨時變量

我們有時候需要寫一個臨時變量如一個臨時的Array,有一種方式可以不用單獨定義臨時變量:

?


(z ||= [])

?

當然這不是一種很好的編程習慣,建議不要大量在代碼中使用。

8. 使用非字符串或非Symbol對象作為Hash的Key

或許你從來沒有嘗試過使用非String或非Symbol對象作為Hash的Key,但是確實是可以的,有時候還蠻有用。

?


does = is = { true => 'Yes', false => 'No' }

?

does[10 == 50]?????????????????????? # => "No"

is[10 > 5]?????????????????????????? # => "Yes"

?

9. 使用and或or將多個操作組合到一行

這個技巧很多熟練的Ruby程序員都會使用,用來替代if和unless這種短行代碼。

?


queue = []

?

%w{hello x world}.each do |word|

? queue

end

puts queue.inspect


# Output:

#?? Added to queue

#?? Added to queue

#?? ["hello", "world"]

?

但是注意,這種方式,若and左邊表達式“queue

10. 判斷當前Ruby解析器是否在執行自己的腳本

有時候你可能需要判斷當前的運行環境是否在自己的Ruby腳本文件中,那么可以使用:

?


if __FILE__ == $0

?

? # Do something.. run tests, call a method, etc. We're direct.

end

?

11. 快速地批量給變量賦值

最常用的多個變量賦值方法是:

?


a, b, c, d = 1, 2, 3, 4

?

在函數中可以批量賦值,通過傳*的參數:

?


def my_method(*args)

?

? a, b, c, d = args

end

?

還可以批量設置成員變量:

?


def initialize(args)

?

? args.keys.each { |name| instance_variable_set "@" + name.to_s, args[name] }

end

?

12. 使用range替代復雜的數字大小比較

如果要比較if x > 1000 && x

?


year = 1972

?

puts? case year

??????? when 1970..1979: "Seventies"

??????? when 1980..1989: "Eighties"

??????? when 1990..1999: "Nineties"

????? end

?

13. 使用枚舉操作替換重復代碼

寫代碼最忌諱“重復”,在Ruby中有時候會require很多文件,可以使用下面的方式省去重復的require:

?


%w{rubygems daemons eventmachine}.each { |x| require x }

?

14. 三元操作

Ruby和其他語言一樣,有三元操作:

?


puts x == 10 ? "x is ten" : "x is not ten"

?


# Or.. an assignment based on the results of a ternary operation:

LOG.sev_threshold = ENVIRONMENT == :development ? Logger::DEBUG : Logger::INFO

?

15. 嵌套的三元操作

?


qty = 1

?

qty == 0 ? 'none' : qty == 1 ? 'one' : 'many'

# Just to illustrate, in case of confusion:

(qty == 0 ? 'none' : (qty == 1 ? 'one' : 'many'))

?

16. 幾種返回true,false的實現

最普通的是:

?


def is_odd(x)

?

? # Wayyyy too long..

? if x % 2 == 0

??? return false

? else

??? return true

? end

end

?

可以簡潔一點是:

?


def is_odd(x)

?

? x % 2 == 0 ? false : true

end

?

還可以更簡潔:

?


def is_odd(x)

?

? # Use the logical results provided to you by Ruby already..

? x % 2 != 0

end

?

當然,有時候你擔心返回的nil(ruby中的判定規則是nil為false,其他都為true),那么可以顯示轉換:

?


class String

?

? def contains_digits

??? self[/d/] ? true : false

? end

end

?

17. 查看異常堆棧

?


def do_division_by_zero; 5 / 0; end

?

begin

? do_division_by_zero

rescue => exception

? puts exception.backtrace

end

?

18. 將一個對象轉換為數組

*操作符可以將一個對象轉換為數組對象

?


1.9.3p125 :005 > items = 123456

?

?=> 123456

1.9.3p125 :006 > [*items]

?=> [123456]

1.9.3p125 :007 > [*items].each do | i | puts i end

123456

?=> [123456]

?

19. 沒有begin的rescue塊

Ruby中捕獲異常的代碼是begin...rescue...:

?


def x

?

? begin

??? # ...

? rescue

??? # ...

? end

end

?

但是rescue可以沒有begin:

?


def x

?

? # ...

rescue

? # ...

end

?

20. 塊注釋

C和Java中的塊代碼注釋是/**/,ruby中也有類似的塊注釋:

?


puts "x"

?

=begin

? this is a block comment

? You can put anything you like here!


? puts "y"

=end

puts "z"

?

21. 拋出異常

Java中拋異常是使用throw,ruby中更靈活,可以在一行代碼中直接拋異常而不中斷當前調用棧:

?


h = { :age => 10 }

?

h[:name].downcase???????????????????????? # ERROR

h[:name].downcase rescue "No name"??????? # => "No name"

以上就是Ruby編程的21個小技巧介紹,希望小編整理的相關知識和資料都對你們有所幫助,更多內容請繼續關注武林技術頻道網站!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美视频| 久久精品国产久精国产一老狼| 日本久久亚洲电影| 久久国产精彩视频| 国产91网红主播在线观看| 欧美日韩不卡合集视频| 欧美日韩综合视频网址| www国产91| www国产精品视频| 日韩av在线网| 麻豆国产va免费精品高清在线| 亚洲欧美精品中文字幕在线| 97人人做人人爱| 日韩电影大全免费观看2023年上| 欧美国产日韩精品| 欧美日韩精品在线播放| 日本三级久久久| 久久久久久久久久久人体| 亚洲国产精彩中文乱码av在线播放| 欧美交受高潮1| 亚洲第一区第二区| 91视频免费网站| 亚洲色图偷窥自拍| 91精品国产九九九久久久亚洲| 最新日韩中文字幕| 国产精品视频区| 欧美日韩国产91| 97精品视频在线播放| 成人亚洲综合色就1024| 97色在线视频观看| 国语自产精品视频在线看抢先版图片| 久久亚洲综合国产精品99麻豆精品福利| 久久免费高清视频| 国产91|九色| 全亚洲最色的网站在线观看| 精品国产乱码久久久久久虫虫漫画| 欧美久久精品午夜青青大伊人| 亚洲欧美精品一区二区| 91精品国产沙发| 日韩成人激情影院| 欧美色视频日本高清在线观看| 78m国产成人精品视频| 亚洲va欧美va国产综合久久| 亚洲娇小xxxx欧美娇小| 92裸体在线视频网站| 九九热视频这里只有精品| 国产美女精品视频免费观看| 亚洲第一区中文字幕| 欧美多人爱爱视频网站| 26uuu另类亚洲欧美日本一| 亚洲女同精品视频| 欧美色播在线播放| 国产成人精品综合| 国产欧美一区二区三区久久人妖| 欧美怡红院视频一区二区三区| 国产精品一区二区久久国产| 日韩大陆欧美高清视频区| 精品久久久999| 日韩欧美精品中文字幕| 北条麻妃一区二区在线观看| 欧美性视频网站| 欧美成人精品一区二区三区| 97不卡在线视频| 国产精品丝袜白浆摸在线| 成人在线小视频| 精品国产乱码久久久久久天美| 91在线无精精品一区二区| 久久久免费精品| 亚洲区一区二区| 国产999精品久久久影片官网| 欧亚精品中文字幕| 欧美日韩中文字幕在线视频| 日韩中文字在线| 日韩在线资源网| 热久久99这里有精品| 丁香五六月婷婷久久激情| 日韩中文视频免费在线观看| 日韩精品视频三区| 欧美在线国产精品| 亚洲欧美激情在线视频| 日日狠狠久久偷偷四色综合免费| 日韩在线观看av| 91久久综合亚洲鲁鲁五月天| 国产成人精品最新| 91高潮精品免费porn| 在线观看国产欧美| 欧美日韩国产精品一区二区三区四区| 日韩电影大片中文字幕| 欧美尺度大的性做爰视频| 91国产精品电影| 亚洲人午夜精品免费| 日本久久亚洲电影| 成人www视频在线观看| 色噜噜狠狠狠综合曰曰曰| 成人免费视频网| 亚洲aⅴ日韩av电影在线观看| 久久久影视精品| 性欧美暴力猛交69hd| 欧美电影免费观看| 久久久久久伊人| 亚洲一区二区国产| 久久久久久亚洲| 亚洲黄色www网站| 日韩高清人体午夜| 亚洲国产中文字幕久久网| 久久久久久91香蕉国产| 国产一区av在线| 91精品啪aⅴ在线观看国产| 欧美激情一区二区三区成人| 亚洲成av人影院在线观看| 国产精品一区专区欧美日韩| xvideos成人免费中文版| 日韩一区视频在线| 日韩视频免费看| 国产精品一区二区三区免费视频| 国产suv精品一区二区三区88区| 国产精品99久久久久久人| 91国产美女在线观看| 一本色道久久88亚洲综合88| 亚洲天堂2020| 欧美激情日韩图片| 亚洲精品一区二区三区不| 黄色成人av在线| 97久久精品视频| 亚洲欧美在线免费观看| 精品久久久久久中文字幕| 欧美日产国产成人免费图片| 亚洲美女视频网站| 欧美激情视频一区二区| 一区二区亚洲精品国产| 亚洲国产精品国自产拍av秋霞| 青青青国产精品一区二区| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲精品日韩久久久| 国产在线视频欧美| 性欧美暴力猛交69hd| 亚洲成人中文字幕| 国产日韩在线观看av| 久久精品欧美视频| 国产成人一区二区三区电影| 欧美激情久久久久久| 精品国产91乱高清在线观看| 久久久亚洲精品视频| 欧美精品在线视频观看| 亚洲欧美国产一区二区三区| 欧美日韩国产丝袜美女| 91精品国产综合久久久久久久久| 欧美另类第一页| 欧美裸体xxxx| 日韩激情av在线免费观看| 亚洲人成在线免费观看| 国产精品你懂得| 国产精品人成电影| 国产成人精品亚洲精品| 亚洲国产成人一区| 国产日本欧美一区二区三区在线| 日本精品va在线观看| 久久国产精品久久国产精品| 亚洲国产小视频在线观看| 日韩一区二区三区国产| 91精品视频专区| 国产精品27p| 欧美电影在线观看完整版| 欧美肥婆姓交大片|