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
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
相关文章推荐
- Ruby 之 Block, Proc, Lambda 联系--区别,转载
- Ruby中的block、proc、lambda区别总结
- ruby中Block, Proc 和 Lambda 浅析
- 玩转Ruby系列:玩转闭包(Block,Proc,lambda)
- Ruby系列:玩转闭包(Block,Proc,lambda)
- Ruby中使用Block、Proc、lambda实现闭包
- ruby 中的Block,lambda,Proc
- Ruby学习笔记-Block, Proc and Lambda
- What Is the Difference Between a Block, a Proc, and a Lambda in Ruby
- Ruby 中的 block、proc、lambda
- Ruby Proc 和 lambda的共同点和区别
- ruby中的 Proc、block说明
- 详解Ruby中的代码块对象Proc
- [Ruby笔记]29. Ruby yield from method to block 从方法到块
- 浅谈Ruby中的block, proc, lambda, method object的区别
- Alex学Ruby[详解 block和Proc对象]
- Ruby中的block代码块学习教程
- Alex学Ruby[详解 block和Proc对象 2]
- Ruby里proc和lambda的两个重要区别
- ruby的Proc和代码块(Block)