相关疑难解决方法(0)

当调用instance_eval(&lambda)来传递当前上下文时得到错误'错误的参数个数'

要清楚 - 这段代码运行完美 - 带proc的代码

但如果相反我将Proc.new更改为lambda,我收到错误

ArgumentError: wrong number of arguments (1 for 0)
Run Code Online (Sandbox Code Playgroud)

可能是因为instance_eval希望将self作为param传递,而lambda视为一种方法并且不接受未知的params?

有两个例子 - 首先是工作:

class Rule
  def get_rule
    Proc.new { puts name }
  end
end

class Person
  attr_accessor :name

  def init_rule 
    @name = "ruby"
    instance_eval(&Rule.new.get_rule)
  end
end
Run Code Online (Sandbox Code Playgroud)

第二个不是:

class Rule
  def get_rule
    lambda { puts name }
  end
end

class Person
   attr_accessor :name

   def init_rule 
     @name = "ruby"
     instance_eval(&Rule.new.get_rule)
   end
end
Run Code Online (Sandbox Code Playgroud)

谢谢

ruby lambda metaprogramming

6
推荐指数
1
解决办法
1310
查看次数

红宝石lambda语境

假设我在最顶层有以下ruby定义

callable = lambda {"#{hi}"}
Run Code Online (Sandbox Code Playgroud)

并且假设稍后我创建了一个名为的对象temp,它有一个名为的方法hi.现在我想做的是callable在上下文中调用temp.我试过了

temp.instance_eval do callable.call end
Run Code Online (Sandbox Code Playgroud)

但这给了我错误" NameError: undefined local variable or method 'hi' for main:Object".我想知道是否有任何方式重新绑定的情况下callable,以temp使我没有得到一个错误信息?我知道我可以method_missing在main上定义:对象并重新路由所有方法调用,temp但这看起来像是一个太大的黑客来完成我想要的东西.

ruby lambda metaprogramming

5
推荐指数
1
解决办法
1693
查看次数

标签 统计

lambda ×2

metaprogramming ×2

ruby ×2