示例Ruby代码,这个抽象的东西怎么样?

时间:2011-01-27 15:07:59

标签: ruby-on-rails ruby

观看Yehuda的这段视频,他给出了关于Ruby如何帮助您构建更好的抽象的片段。

class FOWA
    def self.is_fun
        def fun?
            true
        end
    end


    is_fun
end

他在红宝石中谈论如果你一遍又一遍地重复你的课程中的代码,你可以抽象出来而不必考虑方法等方面的事情。他说这是使用元编程技术

有人可以解释这是什么吗?

它是FOWA上的一个类方法(所以它就像一个静态方法,你不需要一个实例来调用它),这个类方法实际上只是包装另一个返回true的方法。

这个is_fun类方法现在正在执行还是什么?不确定最后一行“is_fun”在做什么?

http://vimeo.com/11679138

1 个答案:

答案 0 :(得分:2)

类末尾的is_fun调用调用静态方法。然后静态方法定义FOWA类中的fun?方法。然后,你可以这样做:

f = FOWA.new
f.fun?

如果您在课程结束时取消is_fun来电,则fun?方法无法定义。

他提到你不会以这种方式使用它,但重点是动态地向类添加方法是多么容易。如果您希望方法在子类中可用并且不在FOWA中调用is_fun,则可以像这样使用它,但您可能在子类中。如果您有is_fun的参数,fun?的定义会根据该参数的变化而变得更有趣。

这也导致modules,因为您可以使用相同的module方法定义is_fun,然后让您的班级extend成为modulemodule中的方法在课堂上可用。如果您希望您的方法不仅仅可用于FOWA的子类,那么您将使用此技术。