在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Ruby/ Ruby塊
Ruby for循環(huán)
Ruby教程
Ruby文件I/O
Ruby迭代器
Ruby哈希
Ruby日期時間
Ruby類和對象
Ruby快速入門(30分鐘)
Ruby redo/retry語句
Ruby模塊
Ruby解析XML(REXML)
Ruby if-else語句
Ruby的功能特點
Ruby break/next語句
Ruby方法
Ruby是什么?
Ruby與Python比較
Ruby Case語句
Ruby目錄
Ruby范圍
Ruby異常
Ruby套接字編程(Socket)
Ruby字符串
Ruby安裝配置
Ruby運算符
Ruby while/do...while循環(huán)語句
Ruby第一個HelloWorld程序
Ruby until循環(huán)語句
Ruby注釋
Ruby塊
Ruby數(shù)據(jù)類型
Ruby面向?qū)ο?/span>
Ruby正則表達(dá)式
Ruby數(shù)組
Ruby變量
Ruby多線程編程

Ruby塊

Ruby代碼塊在其他編程語言中被稱為閉包。 它由一組代碼組成,它們始終用大括號括起來,或者在do..end之間書寫。 大括號語法總是具有比do..end語法更高的優(yōu)先級。也就是說大括號優(yōu)先級高,do..end優(yōu)先級低。

Ruby塊可用兩種方式來編寫 -

  • doend之間的多行(多行塊不是內(nèi)聯(lián)的)
  • 大括號{}之間的內(nèi)嵌

兩者都是相同的,都具有相同的功能。要調(diào)用塊,您需要使用具有與塊相同名稱的函數(shù)。塊總是與調(diào)用函數(shù)一起。 塊可以有自己的參數(shù)。

語法:

block_name{  
   statement1  
   statement2  
   ..........  
}

示例:

下面的例子顯示了多行程序段。

[10, 20, 30].each do |n|   
 puts n   
end

下面的示例顯示了內(nèi)聯(lián)塊。

[10, 20, 30].each {|n| puts n}

yield語句

yield語句用于調(diào)用具有值的方法中的塊。

示例:

#!/usr/bin/ruby   

def met   
   puts "This is method"   
   yield   
   puts "You will be back to method"   
   yield   
end   
met {puts "This is block"}

將上面代碼保存到文件:yield-statment.rb , 執(zhí)行上面代碼得到以下結(jié)果 -

F:\worksp\ruby>ruby yield-statment.rb
This is method
This is block
You will be back to method
This is block

F:\worksp\ruby>

執(zhí)行met方法到達(dá)yield語句行時,塊內(nèi)的代碼被執(zhí)行。 當(dāng)塊執(zhí)行完成時,met方法的代碼繼續(xù)。

用yield語句傳遞參數(shù)

可以使用yield語句傳遞一個或多個參數(shù)。

示例:

#!/usr/bin/ruby   

def met   
   yield 1   
   puts "This is method"   
   yield 2   
end   
met {|i| puts "This is block #{i}"}

將上面代碼保存到文件:yield-statment-pass-parm.rb , 執(zhí)行上面代碼得到以下結(jié)果 -

F:\worksp\ruby>ruby yield-statment-pass-parm.rb
This is block 1
This is method
This is block 2

F:\worksp\ruby>

塊變量

可以在塊參數(shù)外部和內(nèi)部使用相同的變量,看看下面的例子。

示例:

#!/usr/bin/ruby   

x = "Outer variable"    
3.times do |x|    
puts "Inside the block: #{x}"    
end    
puts "Outside the block: #{x}"

將上面代碼保存到文件:block-variables.rb , 執(zhí)行上面代碼得到以下結(jié)果 -

F:\worksp\ruby>ruby block-variables.rb
Inside the block: 0
Inside the block: 1
Inside the block: 2
Outside the block: Outer variable

F:\worksp\ruby>

BEGIN和END塊

Ruby BEGINEND塊用于聲明該文件正在加載,文件已分別加載。

示例:

#!/usr/bin/ruby   

BEGIN {   
  puts "code block is being loaded"   
}   

END {   
  puts "code block has been loaded"   
}   
puts "This is the code block"

將上面代碼保存到文件:block-begin-end.rb , 執(zhí)行上面代碼得到以下結(jié)果 -

F:\worksp\ruby>ruby block-begin-end.rb
code block is being loaded
This is the code block
code block has been loaded

F:\worksp\ruby>

符號參數(shù)(&塊)

&塊是一種將參考(而不是局部變量)傳遞給塊的方法。這里,塊之后的&只是一個引用的名字,任何其他的名字都可以用它來代替this

示例:

#!/usr/bin/ruby   

def met(&block)   
  puts "This is method"   
  block.call   
end   
met { puts "This is &block example" }

將上面代碼保存到文件:block-and-amperand.rb , 執(zhí)行上面代碼得到以下結(jié)果 -

F:\worksp\ruby>ruby block-and-amperand.rb
This is method
This is &block example

F:\worksp\ruby>

這里,met方法中的塊變量是對塊的引用,它使用call來執(zhí)行。 調(diào)用方法與yield方法相同。

使用默認(rèn)值初始化對象

Ruby有一個初始化器,稱為yield(self)。 在這里,self是被初始化的對象。

示例:

class Novel   
  attr_accessor :pages, :category   

  def initialize   
    yield(self)   
  end   
end   

novel = Novel.new do |n|   
  n.pages = 564   
  n.category = "thriller"   
end   

puts "I am reading a #{novel.category} novel which has #{novel.pages} pages."

將上面代碼保存到文件:yield-self.rb , 執(zhí)行上面代碼得到以下結(jié)果 -

F:\worksp\ruby>ruby yield-self.rb
I am reading a thriller novel which has 564 pages.

F:\worksp\ruby>