第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Alex學(xué)Ruby[詳解 block和Proc對(duì)象]

標(biāo)簽:
Ruby


Ruby block Part One:

本部分内容是基于Ruby 1. 8. 7

lambda方法:

 例子1:

myBlock = lambda {|x| puts x}               =>#<Proc:0x00008908@(irb):1>

myBlock.call("Ruby way")   

=>   Ruby way

puts myBlock.class

=>   Proc

由此例子可以看出, lambda方法可以直接生成一个Proc对象。

例子2:

sub_lambda = lambda {|x,y| x - y} 

=> #<Proc:0x0007ff44@(irb):4>

sub_lambda(2) 

=>NoMethodError: undefined method `sub_lambda' for main:Object

sub_lambda.call(2) 

=>ArgumentError: wrong number of arguments (1 for 2)

sub_lambda.call(2,3,4) 

=>ArgumentError: wrong number of arguments (3 for 2)

sub_lambda.call(2,"3")

=>TypeError: String can't be coerced into Fixnum

sub_lambda.call(2,3) 

=> -1

由此例可以看出,lambda生成的proc对象必须被call才可被调用。 而lambda方法会检查传入的参数个数,和参数类型。

例子3:

sub_procnew = Proc.new {|x,y| x-y} 

=> #<Proc:0x00052238@(irb):12>

sub_procnew.call(4)

=>TypeError: nil can't be coerced into Fixnum

sub_procnew.call(4,3,5)

 => 1

sub_procnew.call(4,"3",5) 

=>TypeError: String can't be coerced into Fixnum

sub_procnew.call(4,3,"5")  

=> 1

由此例看出,Proc.new生成的对象不会去检查参数个数, 只是多退少补(nil), 但是会检查参数数据类型。

例子4:

def call_block_twice

    yield

    puts “going to call the block”

   yield

   puts “Going to call the block again”

end

call_block_twice {puts “This is a block”}

这个例子是两次调用块的例子。

我们可以重写这个方法:

def multiple_yield(n)

    if block_given?

         n.times { yield }

    else

         raise ArgumentError.new(“Block is required to call yield multip times”)

    end

end

multiple_yield(2) { puts “I m a block”}

例子5,你也可以这么写:

def foo(&block)

   block.call

end

foo {puts “Hi”}

©著作权归作者所有:来自51CTO博客作者blackanger的原创作品,如需转载,请注明出处,否则将追究法律责任

职场Ruby休闲


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消