小编Ant*_*ony的帖子

我们如何在不同的Ruby类之间复制单例方法?

我试图用一个方法定义一个类,一个缺少这些方法的类,然后允许后一个类的对象从前一个类的实例中"学习"这些方法.

这是我的尝试(Ruby 1.9.2) - 当我尝试在lambda绑定中更改'self'的值时,它会中断(在行评论"BREAKS!").

如果你能弄清楚如何解决这个问题 - 我会很高兴找到答案.

class Skill

  attr_accessor :name
  attr_accessor :technique

  def initialize(name, &technique_proc)
    @name = name
    @technique = lambda(&proc)
  end

end

class Person

  attr_accessor :name

  def initialize(name)
    @name = name
  end

  def method_missing(m, *args)
    "#{@name} the #{self.class}: I don't know how to #{m}"
  end

  def learn_skill(skill)
    puts "#{@name} the #{self.class} is learning skill: #{skill.name}"
    actual_self = self
    eval "self = #{actual_self}", skill.technique.binding ####### BREAKS!
    define_singleton_method skill.name.to_sym, skill.technique
  end

  def teach_skill(skill_name)
    skill = nil
    if self.respond_to?(skill_name) 
      puts …
Run Code Online (Sandbox Code Playgroud)

ruby lambda eval metaprogramming proc-object

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

标签 统计

eval ×1

lambda ×1

metaprogramming ×1

proc-object ×1

ruby ×1