我能否创建一个“function”的S4超类,并从函数调用中访问该对象的插槽?目前我有:
> setClass("pow",representation=representation(pow="numeric"),contains="function")
[1] "pow"
> z=new("pow",function(x){x^2},pow=3)
> z(2)
[1] 4
现在我真正想要的是函数自身的@pow次幂,因此如果我执行:
> z@pow=3
我得到了立方体,如果我执行以下操作:
> z@pow=2
我得到了方块。
但是我不知道如何像在Python中那样获取对'self'的引用。我猜它在环境的某个地方...
下面是Python中的示例:
class Pow:
def __init__(self,power):
self.power=power
self.__call__ = lambda x: pow(x,self.power)
p = Pow(2) # p is now a 'squarer'
print p(2) # prints 4
p.power=3 # p is now a 'cuber'
print p(2) # prints 8
这真的非常简单,我甚至不需要执行 "import antigravity"....