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

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