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 `

'

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

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

你可能感兴趣的:(ruby 的代码块 proc/lambda/method/block)