激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - Ruby中Block和迭代器的使用講解

Ruby中Block和迭代器的使用講解

2020-05-03 12:06腳本之家 Ruby

這篇文章主要介紹了Ruby中Block和迭代器的使用,是Ruby入門學習中的基礎知識,需要的朋友可以參考下

我們來簡單地描述Ruby的一個獨特特性。Block,一種可以和方法調用相關聯的代碼塊,幾乎就像參數一樣。這是一個不可思議的功能強大的特性。

可以用Block實現回調(但它比Java的匿名內部(anonymous inner)類更簡單),傳遞一組代碼(但它遠比c的函數指針靈活),以及實現迭代器

Block只是在花括號或者do...end之間的一組代碼。

?
1
2
3
4
5
6
7
8
9
{puts "Hello"}             #this is a block
 
do                      ###
 
 club.enroll(person)            #and so is this
 
 person.socialize              #
 
end                     ###

為什么有兩種分界符?部分原因是有人覺得有時候用一種分界符比另外一種感覺更自然。另外一部分原因是它們有不同的優先級:花括號比do/end綁定的更緊密些。我們嘗試遵循正在成為Ruby標準的一個約定俗成,單行block用花括號,多行block用do/end。

一旦創建了block,就可以與方法的調用相關聯。把block的開始放在含有方法調用的源碼行的結尾處,就可以實現關聯。比如,在下面的代碼中,含有puts "Hi" 的block與greet方法的調用相關聯。

?
1
greet {puts "Hi"}

如果方法有參數,它們出現在block之前。

?
1
verbose_greet("Dave","loyal customer"){puts "Hi"}

然后使用Ruby的yield語句,方法可以一次或多次地調用(invoke)相關聯的block。可以把yield想象成比如方法調用,它調用含有yield語句的方法所關聯的block。

下面的例子顯示了如何使用yield語句。定義了一個方法,它會調用yield兩次。然后調用這個方法,把block放在同一行,在方法調用之后(并在方法的所有參數之后)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
def call_block
 
 puts "Start of method"
 
 yield
 
 yield
 
 puts "End of method"
 
end
 
call_block{puts "In the block"}

輸出結果:

?
1
2
3
4
5
6
7
Strat of method
 
In the block
 
In the block
 
End of method

可以提供參數給yield的調用;參數會傳遞到block中。在block中,豎線(|)之間給出參數名來接受這些來自yield的參數。

?
1
2
3
4
5
6
7
def call_block
 
 yield("Hello",99)
 
end
 
call_block {|str,num| ...}

在Ruby庫中大量使用了block來實現迭代器;迭代器是從某種收集(collection)如數組中連續返回元素的方法。

?
1
2
3
animals = %w(ant bee cat dog elk)  #創建一個數組
 
animals.each{|animal| puts animal}  #迭代它的內容

輸出結果:

?
1
2
3
4
5
6
7
8
9
ant
 
bee
 
cat
 
dog
 
elk

讓我們看一下如何實現應用在前面例子中的Array類中的each迭代器。each迭代器循環處理數組中的元素,對每個元素調用yield。在偽碼中,它可能寫成:

?
1
2
3
4
5
6
7
8
9
10
11
#在Array類中......
 
def each
 
 for each element         #<--無效的Ruby語句
 
  yield(element)
 
 end
 
end

許多內建于c和java等語言的循環結構在Ruby中只是方法調用,這些方法會零次或多次地調用相關聯的block。

?
1
2
3
4
5
6
7
['cat','dog','horse'].each{|name| print name," "}
 
5.times {print "*"}
 
3.upto(6){|i| print i}
 
('a'..'e').each{|char| print char}

輸出結果:

?
1
cat dog horse *****3456abcde

上面的代碼要求對象5 五次調用block;然后要求對象3調用一個block,并傳入一個連續的值,直到這個值到達6為止。最后對a到e的字符區間(range),使用each方法調用block。

延伸 · 閱讀

精彩推薦
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表...

    范孝鵬2192020-05-07
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

    可樂加糖4762020-04-12
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數據是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網2962020-04-10
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數,只有方法.而且實際上有不止一種方法.這一節我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網3572020-04-08
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
主站蜘蛛池模板: 精品人成 | 精品一区二区久久久久久久网精 | 免费a级毛片大学生免费观看 | 免费观看黄色一级视频 | 激情五月少妇a | 97久久人人超碰caoprom | 亚洲欧美日韩精品久久亚洲区色播 | 91短视频网页版 | 亚洲视频观看 | 国产高清自拍一区 | 看免费毛片 | 久久99国产精品久久99果冻传媒 | 国产91大片| 国产精品久久久久网站 | 亚洲国产网址 | 国产一级毛片高清视频 | 国产精品成人亚洲一区二区 | 免费观看一区 | 久久久国产一区二区三区 | 日本中文视频 | 亚洲性爰 | 国产精品久久久久无码av | 91极品视频在线观看 | 黄色片视频在线观看 | 天堂在线中文资源 | 精品国产乱码久久久久久丨区2区 | 欧美一区在线观看视频 | 国产毛片网 | 久久久国产电影 | 日本人乱人乱亲乱色视频观看 | 在线a毛片免费视频观看 | 爱逼av| 在火车上摸两乳爽的大叫 | 日本道中文字幕 | 欧美成年人在线视频 | lutube成人福利在线观看 | 日韩字幕在线 | 日本在线观看视频网站 | 欧美一级黄视频 | h色网站在线观看 | 精品一区二区三区日本 |