Ruby 在另一个对象的上下文中执行lambda

Ruby 在另一个对象的上下文中执行lambda,ruby,Ruby,看起来proc可以在另一个对象中执行,但lambda不能 [1] pry(main)> class A; def a; 5; end; end [2] pry(main)> pr = proc { a + 1 } # => #<Proc:0x007f5024264668@(pry):2> [3] pry(main)> la = -> { a + 1 } # => #<Proc:0x007f5023fc0e48@(pry):3 (lambd

看起来proc可以在另一个对象中执行,但lambda不能

[1] pry(main)> class A; def a; 5; end; end
[2] pry(main)> pr = proc { a + 1 } # => #<Proc:0x007f5024264668@(pry):2>
[3] pry(main)> la = -> { a + 1 }   # => #<Proc:0x007f5023fc0e48@(pry):3 (lambda)>
[4] pry(main)> A.new.instance_eval &pr
=> 6
[5] pry(main)> A.new.instance_eval &la
ArgumentError: wrong number of arguments (1 for 0)
from (pry):3:in `block in __pry__'
[6] pry(main)> 
[1]撬(主)>A级;DEFA;5.终止终止
[2] pry(main)>pr=proc{a+1}#=>#
[3] 普里(主)>la=->{a+1}#=>#
[4] pry(主)>A.new.instance_eval&pr
=> 6
[5] 撬(主)>A.new.instance_eval&la
ArgumentError:参数数目错误(1代表0)
from(pry):3:in‘block in uuuu pry uuuu’
[6] 撬动(主)>

在本例中,lambda是否有其他方法可以像proc一样执行,或者在这种情况下我应该始终使用procs吗?

这里的问题是
实例_eval
的接收者作为参数传递给块。进程允许未声明的参数,而lambda不允许

pr = proc {|*args| p args; a + 1 }
A.new.instance_eval &pr
[#<A:0x43668596>]
 => 6
您可以使用
instance\u exec
来代替:

> la = -> { a + 1 }
> A.new.instance_exec &la
  => 6
> la = ->(add) { a + 1 + add }
> A.new.instance_exec 10, &la
  => 16

这里的问题是,
instance\u eval
的接收者作为参数传递给块。进程允许未声明的参数,而lambda不允许

pr = proc {|*args| p args; a + 1 }
A.new.instance_eval &pr
[#<A:0x43668596>]
 => 6
您可以使用
instance\u exec
来代替:

> la = -> { a + 1 }
> A.new.instance_exec &la
  => 6
> la = ->(add) { a + 1 + add }
> A.new.instance_exec 10, &la
  => 16