残念ながら(f+g)(3)
、f と g が両方とも単項関数であるようなことは R では機能しません。したがって、次の方法で単項関数の「+」演算子をオーバーロードしようとしました。
"+.function" = function(e1, e2){
return(function(x) e1(x) + e2(x))
}
しかし、これを使用しようとすると、これは何もしません。コード
a = function(x) 2*x
(a+a)(2)
+.function
が定義されていない場合と同じエラーが発生します。
しばらく遊んでみると、実際にはこの方法で関数を追加できる可能性があることがわかりました。関数が参照クラスのメンバー関数である場合、これは機能します! つまり、次のコード (上記の "+" 定義と一緒に)
clsA = setRefClass("clsA",
methods = list(
b = function(x) 2*x
))
inst_a = clsA$new()
(inst_a$b + inst_a$b)(2)
"8" を返します (予想どおり)。したがって、私はすでに私の問題に対するある種の回避策を持っています。今私の質問は次のとおりです。
この奇妙な動作の理由は何ですか? +.function
「通常の」関数ではなく、クラスメンバー関数を気にするのはなぜですか? 演算子を通常の関数に「拡張」する方法を知っている人はいますか?