ruby 的代码块 proc/lambda/method/block

proc 可以看做是一个代码块

a = proc{|x| x}

a.call #=> nil


lambda 更象是一个方法

b = lambda{|x| x}

b.call #=> 

        ArgumentError: wrong number of arguments (given 0, expected 1)
from (irb):122:in `block in irb_binding'
from (irb):123
from /home/zhihui/.rbenv/versions/2.3.3/bin/irb:11:in `<main>'

两个方法自己先体会一下有什么区别。

def hi

  a = proc {

    return "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"

  }

  a.call

  "say hi"

end

irb> hi  #=> "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"


def hello

  b = lambda {

    return "hello"

  }

  b.call

  "say hello"

end

irb> hello #=>  "say hello"


------______------华丽分割线------______-----


method可以把方法作为参数传递 

method(:hi).call

irb>   method(:hi).call
=>   "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"

作用把方法作为代码块传递。

 -----______------华丽分割线------______-----

block 和 yield 的区别

def hi &black

  black.call

end

irb> hi { 666 } 

irb> #=> 666

------------------------------

def hello

  yiled

end

irb> hello { 777 }

irb> 777

-----------------------------

实际上他们除了写法上的一些不同之外,在效率上yiled的效率高出很多,所也大多数情况下都用yiled

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值