「関数」の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スロットのxの累乗になることです。
> 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
本当に簡単なことではありませんでした、そして私は「反重力をインポートする」ことさえする必要がありませんでした…。