2012-02-15 165 views
4

我想用一些方法编写小类,这些方法属于其他类,因此如何在其他类中定义方法,这些方法是现有的副本。我相信这是我不懂的metaprogramming magi。将方法从一个类复制到另一个类

class Foo 
    def initialize 
    # with blocks, I would just pass block, but this is methods 
    # so this won't work 
    Bar.class_eval(perform) 
    Bar.class_eval(process) 
    Bar.class_eval(save) 
    end 

    def perform 
    1+1 
    end 

    def process 
    # some code 
    end 

    def save 
    # some code 
    end 
end 

class Bar; end 

foo = Foo.new 
foo.perform 
#=> 2 
Bar.test 
#=> 1 

为什么我需要这个?我正在研究只需要三种方法就能上课的宝石。在初始化时(哪些病被隐藏在父类中)会将这些方法传递给不同的类。我可以用块来做到这一点,但用方法来说,它更简洁。

PS:这就像从一类到另一个

PSS复制方法:或者...怎么方法转换为PROC,这样我就可以把它传递给class_eval

+1

也许你必须使用授权? http://khelll.com/blog/ruby/delegation-in-ruby/ – Fivell 2012-02-15 13:23:38

+0

你不能只包含一个模块吗? – 2012-02-15 13:24:59

+0

@Fivell,也许!我需要现在阅读关于代表团 – fl00r 2012-02-15 13:26:06

回答

12

要转换一种可以像Proc一样调用的方法,使用obj.method(:method_name)。这会给你一个绑定方法对象,当call编辑时,将调用obj。如果你想在同一个类的不同对象上调用它,你可以调用method.unbind.bind(different_obj)

这仍然不允许您将方法从一个类复制到另一个类。如果您希望允许用户传递定义3个方法的类而不是传递3个方块,那么如果您在内部存储对该类(或其实例)的引用并根据需要调用方法。这就是评论“授权”的人的意思。或者,您可以让用户通过一个模块,并且根据需要制作您自己的类includeextend模块。

+0

引用用户的类对象是个好主意,实际上 – fl00r 2012-02-15 13:51:27

+0

我相信我会用到参考:)但是现在我感兴趣如果可以的话在Ruby中的类之间复制方法! – fl00r 2012-02-15 13:54:26

+0

我不认为有,但如果你找到方法,请发布。我也想知道。 – 2012-02-15 13:57:08

相关问题