观看Yehuda的这段视频,他给出了关于Ruby如何帮助您构建更好的抽象的片段。
class FOWA
def self.is_fun
def fun?
true
end
end
is_fun
end
他在红宝石中谈论如果你一遍又一遍地重复你的课程中的代码,你可以抽象出来而不必考虑方法等方面的事情。他说这是使用元编程技术
有人可以解释这是什么吗?
它是FOWA上的一个类方法(所以它就像一个静态方法,你不需要一个实例来调用它),这个类方法实际上只是包装另一个返回true的方法。
这个is_fun类方法现在正在执行还是什么?不确定最后一行“is_fun”在做什么?
答案 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
成为module
, module
中的方法在课堂上可用。如果您希望您的方法不仅仅可用于FOWA的子类,那么您将使用此技术。