假设我有一个课程如下
class MyClass < Array
def clean_up
#clean up array
end
end
以下是一些使用示例:
obj = MyClass.new
#I call some methods on obj
a = obj #1
obj #2
obj.some_method #3
f = obj[0] #4
有没有办法让我强制调用clean_up
,只有当对象本身被返回时(即没有方法调用它)。
更具体地说,我想在案例1&amp;中调用clean_up
。 2,但不是在案例3&amp; 4。
我该怎么做呢?是否有一些我可以覆盖的隐式方法,或者我可以利用Object
或BasicObject
类中的某些功能?
注意:在情况1和2中,返回实际对象,但在情况3和2中。 4,对象不返回。有关我的具体信息,请参阅评论。
答案 0 :(得分:0)
您可以定义一个访问该对象的方法:
class MyClass < Array
def clean_up
puts 'cleaning up the array now'
end
def get
clean_up
self
end
end
m = MyClass.new
m.get.class
# cleaning up the array now
# => MyClass
答案 1 :(得分:0)
我认为你无法做到这一点,因为调用obj
或a = obj
并不会实际调用obj (MyClass)
对象。同样,您将能够更改控制台中打印的内容(如果您正在使用它),但我想这不是您想要的。
以下是一些有关类似问题的有趣线索: Modifying the default return value of an object belonging to an extended class Ruby Class Return Value