婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 21個你應該知道的Ruby編程技巧

21個你應該知道的Ruby編程技巧

熱門標簽:AI電銷機器人 線路 柯城手機地圖如何做地圖標注 外呼線路從哪里出來的 巫師3地圖標注魔力之所 天津外呼系統怎么收費 漯河電銷 淮安自動外呼系統供應商 征服者企業地圖標注 中牟外呼系統違法嗎

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 ||= []) 'test'

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

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 word and puts "Added to queue" unless word.length   2

end

puts queue.inspect


# Output:

#   Added to queue

#   Added to queue

#   ["hello", "world"]

但是注意,這種方式,若and左邊表達式“queue word”返回nil則“puts "Added to queue"”不會被執行,要慎用。不是Geek建議不要用。

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 2000 ,可以使用如下方式替代:

復制代碼 代碼如下:

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"

標簽:棗莊 甘孜 克拉瑪依 南昌 河池 大慶 西雙版納 內江

巨人網絡通訊聲明:本文標題《21個你應該知道的Ruby編程技巧》,本文關鍵詞  21個,你,應該,知道,的,Ruby,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《21個你應該知道的Ruby編程技巧》相關的同類信息!
  • 本頁收集關于21個你應該知道的Ruby編程技巧的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩美女主播在线视频一区二区三区| 欧美videossexotv100| 久久爱www久久做| 六月丁香婷婷色狠狠久久| 国产一区二区久久| 不卡影院免费观看| 欧美三级中文字幕在线观看| 日韩精品综合一本久道在线视频| 久久久99免费| 一区二区三区四区在线免费观看| 五月婷婷综合在线| 国产精品正在播放| 精品1区2区3区| 久久精品人人做人人综合| 亚洲人成网站精品片在线观看| 亚洲第一主播视频| 国产一区二区在线看| 色噜噜夜夜夜综合网| 欧美精品一区二区三区视频| 亚洲另类春色校园小说| 精品一区二区在线免费观看| 色综合久久天天综合网| 久久这里只有精品首页| 亚洲成年人影院| 成人在线视频首页| 日韩免费成人网| 一区二区三区高清在线| 国产99久久久久| 日韩精品资源二区在线| 亚洲一区二区精品3399| 成人丝袜高跟foot| 精品99久久久久久| 日韩专区在线视频| 在线观看亚洲一区| 亚洲欧美在线观看| 国产经典欧美精品| 欧美电影免费观看高清完整版| 亚洲自拍偷拍麻豆| 波多野结衣在线aⅴ中文字幕不卡| 欧美日本免费一区二区三区| 亚洲精品日日夜夜| jizz一区二区| 国产精品蜜臀av| 国产精品一区二区在线观看网站| 91精品国产一区二区三区香蕉| 一区二区三区日韩精品| 成人av电影在线| 欧美国产日韩a欧美在线观看| 经典三级一区二区| 欧美va亚洲va在线观看蝴蝶网| 日韩1区2区3区| 欧美挠脚心视频网站| 国产亚洲精品中文字幕| 一区二区三区四区高清精品免费观看 | 欧美mv日韩mv国产网站app| 一区二区三区精品在线观看| av中文字幕在线不卡| 国产人妖乱国产精品人妖| 国产一区二区精品久久| 久久夜色精品一区| 国产一本一道久久香蕉| 久久亚洲影视婷婷| 国产一区二区精品久久| 久久久91精品国产一区二区三区| 国产美女精品一区二区三区| 欧美精品一区视频| 岛国一区二区在线观看| 中文字幕在线不卡国产视频| 91色视频在线| 亚洲综合色噜噜狠狠| 国产精品污网站| eeuss鲁片一区二区三区在线看| 久久精品噜噜噜成人av农村| 日韩亚洲欧美在线| 国内精品写真在线观看| 日本一区二区三区在线观看| 国产99久久久精品| 亚洲色图.com| 欧美日韩三级在线| 久久精品国产免费看久久精品| 精品av久久707| 91在线视频在线| 无吗不卡中文字幕| 久久久久88色偷偷免费| 成人黄色电影在线| 亚洲成av人片在线观看| 日韩欧美在线影院| av一区二区三区四区| 亚洲成人免费在线观看| 91精品国产综合久久国产大片| 狠狠色伊人亚洲综合成人| 国产精品三级在线观看| 色视频欧美一区二区三区| 蜜臀av一区二区在线免费观看| 精品一区二区三区蜜桃| 成人小视频在线| 亚洲午夜精品网| 日韩欧美在线网站| 成人黄色av电影| 日韩不卡一区二区三区| 欧美激情一区不卡| 欧美精品乱人伦久久久久久| 国产一区二区三区黄视频| 亚洲同性同志一二三专区| 91麻豆精品国产91久久久久久久久 | 日韩免费性生活视频播放| 成人午夜在线免费| 天天综合网天天综合色| 欧美激情中文字幕| 日韩午夜在线播放| 午夜精品视频一区| 91在线观看免费视频| 91久久精品一区二区三| 精品一区二区在线播放| 夜夜揉揉日日人人青青一国产精品| 精品福利一区二区三区| 欧美午夜在线一二页| 成人综合日日夜夜| 久久精品国产亚洲a| 一区二区日韩电影| 亚洲三级在线免费观看| 久久久精品人体av艺术| 欧美一级夜夜爽| 色琪琪一区二区三区亚洲区| 成人黄色av电影| 国产成人精品免费| 国产在线看一区| 天天做天天摸天天爽国产一区| 成人欧美一区二区三区白人| 国产欧美一区二区三区网站| 久久奇米777| 欧美tickling挠脚心丨vk| 91.com在线观看| 欧美日韩亚洲综合一区| 欧美午夜电影在线播放| 91传媒视频在线播放| 一本色道a无线码一区v| 91在线视频网址| 91麻豆免费看片| 一本色道亚洲精品aⅴ| 色综合久久久久网| 色屁屁一区二区| 在线看国产一区二区| 91激情五月电影| 欧洲国内综合视频| 欧美日韩国产高清一区二区三区| 欧洲色大大久久| 欧美精品免费视频| 欧美一级在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩精品一区二区三区视频在线观看 | 国产精品电影一区二区| 国产日韩视频一区二区三区| 国产亚洲欧美在线| 国产欧美一区二区精品久导航| 久久午夜电影网| 国产欧美一区二区精品忘忧草| 国产女同性恋一区二区| 国产精品久久久久久久蜜臀| 中文字幕中文乱码欧美一区二区 | 国产精品99久久久久久久女警| 国产麻豆视频一区| 成人avav影音| 欧美无砖专区一中文字| 欧美成人精精品一区二区频| 国产亚洲精久久久久久| 国产精品情趣视频| 亚洲成人777| 九九国产精品视频| 成人aaaa免费全部观看| 91麻豆福利精品推荐| 欧美老年两性高潮| 久久久久久久久一| 亚洲在线一区二区三区| 日韩av一区二| 成人性色生活片免费看爆迷你毛片| 在线国产电影不卡| 精品成人私密视频| 一区二区三区精品在线| 久久99国产乱子伦精品免费| av资源站一区| 欧美精品第一页| 国产女人aaa级久久久级| 亚洲成在人线免费| 成人综合在线视频| 日韩欧美国产综合| 亚洲色图一区二区| 国产自产视频一区二区三区| 91在线国内视频| 欧美大片在线观看一区二区| 综合分类小说区另类春色亚洲小说欧美| 午夜日韩在线电影| 成人网页在线观看| 日韩一级片在线观看| 亚洲精品日日夜夜| 国产69精品久久777的优势| 91麻豆精品国产综合久久久久久| 国产视频在线观看一区二区三区| 亚洲成人av资源| 色婷婷久久综合|