Ruby Proc 和 lambda的共同点和区别
2015-03-30 15:47
561 查看
Proc 和 lambda 的目的是把block {....} 变成类似方法一样的对象,使其不需要重复编写同样的block。
Proc 和 lambda 的共同点:
语法类似
Proc.new{|n| n**2}
lambda{|n| n**2}
都可以用.call方法调用
hello_proc = Proc.new{ puts "Hello!" }
hello_proc.call #Hello!
hello_lambda = lambda{ puts "Hello!" }
hello_lambda.call #Hello!
都可以用&关键字把各自转换为block
nums = [1,3,4,5,6]
cube_proc = Proc.new{ |n| n**3 }
cube_nums_proc = nums.map(&cube_proc) #[1,27,64...]
cube_lambda = lambda{ |n| n**3 }
cube_nums_lambda = nums.map(&cube_lambda) #[1,27,64...]
两者都是Object
Proc 和 lambda 的区别:
lambda检查传入的参数,如果传入不正确的参数就throw an error; Proc 则不检查,即使传入不正确的参数也只会忽视它,并把nil赋值给结果(assign
lambda返回时把控制权交还给它的调用函数,而Proc则不会交换。
def batman_ironman_proc
victor = Proc.new { return "Batman will win!" }
victor.call
"Iron Man will win!"
end
puts batman_ironman_proc
def batman_ironman_lambda
victor = lambda { return "Batman will win!" }
victor.call
"Iron Man will win!"
end
puts batman_ironman_lambda
输出结果====》Batman will win!
Iron Man will win!
Proc 和 lambda 的共同点:
语法类似
Proc.new{|n| n**2}
lambda{|n| n**2}
都可以用.call方法调用
hello_proc = Proc.new{ puts "Hello!" }
hello_proc.call #Hello!
hello_lambda = lambda{ puts "Hello!" }
hello_lambda.call #Hello!
都可以用&关键字把各自转换为block
nums = [1,3,4,5,6]
cube_proc = Proc.new{ |n| n**3 }
cube_nums_proc = nums.map(&cube_proc) #[1,27,64...]
cube_lambda = lambda{ |n| n**3 }
cube_nums_lambda = nums.map(&cube_lambda) #[1,27,64...]
两者都是Object
Proc 和 lambda 的区别:
lambda检查传入的参数,如果传入不正确的参数就throw an error; Proc 则不检查,即使传入不正确的参数也只会忽视它,并把nil赋值给结果(assign
nilto any that are missing.)。
lambda返回时把控制权交还给它的调用函数,而Proc则不会交换。
def batman_ironman_proc
victor = Proc.new { return "Batman will win!" }
victor.call
"Iron Man will win!"
end
puts batman_ironman_proc
def batman_ironman_lambda
victor = lambda { return "Batman will win!" }
victor.call
"Iron Man will win!"
end
puts batman_ironman_lambda
输出结果====》Batman will win!
Iron Man will win!
相关文章推荐
- Ruby中proc和lambda的两个区别
- Ruby 之 Block, Proc, Lambda 联系--区别,转载
- Ruby里proc和lambda的两个重要区别
- Ruby中的block、proc、lambda区别总结
- ruby中proc和lambda的return区别
- 【ruby】详解proc与lambda的区别
- lambda与proc的区别
- ruby中Block, Proc 和 Lambda 的区别
- Ruby学习笔记-Block, Proc and Lambda
- Ruby 的 proc 与 lambda
- Ruby系列:玩转闭包(Block,Proc,lambda)
- Ruby 中的 block、proc、lambda
- Ruby中使用Block、Proc、lambda实现闭包
- 浅谈Ruby中的block, proc, lambda, method object的区别
- Ruby中一个Proc和一个lambda的对比
- ruby基础系列-ruby字符串对象使用单引号与多引号输出的区别与共同点
- ruby 的代码块 proc/lambda/method/block
- ruby 中的Block,lambda,Proc
- ruby中Block, Proc 和 Lambda 浅析
- 玩转Ruby系列:玩转闭包(Block,Proc,lambda)