我可以创建一个“函数”的 S4 超类并从函数调用中访问该对象的插槽吗?目前我有:
> setClass("pow",representation=representation(pow="numeric"),contains="function")
[1] "pow"
> z=new("pow",function(x){x^2},pow=3)
> z(2)
[1] 4
现在我真正想要的是函数是 x 到自身 @pow 插槽的幂,所以如果我这样做:
> z@pow=3
我得到立方体,如果我这样做:
> z@pow=2
我得到正方形。
但我不知道如何像在 Python 中那样获得对“自我”的引用。我猜它在环境中的某个地方......
以下是它在 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
再简单不过了,我什至不必做“进口反重力”....