您的位置:首页 > 编程语言 > Ruby

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

2017-08-03 17:40 651 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: