私は本当にあなたのユースケースを理解しますが、していない...構文
よう
o <- setNode(o, c("foo", "bar"))
あなたがねじれを通過していない場合は、Rの通常のコピー・オン・変更のルールに従いますし、 o
のスロット値を置き換えるのではなく、o
のコピーを作成してください。交換方法
node(o) <- c("foo", "bar")
更新o
を適所に置きます。私はsetNode
ではなくnode
を使用しています。その設定は暗黙的に使用されているためです。例えばnode<-
は、オブジェクト構造に関連する何かをしなければならないことを言って何も、私はこれがあなたの欲求にどのように関連するかわからないんだけど
setClass("Node", representation(n="integer", value="character"),
prototype=prototype(n=0L))
setGeneric("node<-", function(x, ..., value) standardGeneric("node<-"))
setReplaceMethod("node", "Node", function(x, ..., value) {
[email protected] <- [email protected] + 1L
[email protected] <- toupper(value)
x
})
、その後
> o <- new("Node")
> o
An object of class "Node"
Slot "n":
[1] 0
Slot "value":
character(0)
> node(o) <- c("foo", "bar")
> o
An object of class "Node"
Slot "n":
[1] 1
Slot "value":
[1] "FOO" "BAR"
「私が欲しいありませんいくつかのインタラクティブ性であること。あなたは
> do.call("node<-", list(x=o, value=c("foo", "bar")))
An object of class "Node"
Slot "n":
[1] 2
Slot "value":
[1] "FOO" "BAR"
として、より多くのコールに似た構文を持っていたコードを書くことができますが、これはnode(o) <- ...
異なる何もしていません。
参照クラス(これはS4の上に構築されているので、setOldClass
のようなS4-ismsがここに当てはまる)を選択して、提供されたインタフェースではなくクラスのコンテンツに適している。たとえば、データベース上の単一のエンティティだけが対話しているため、参照クラスにはデータベース接続が適している可能性があります。ほとんどの場合、参照クラスを使用すると、コピー時変更のセマンティクスを期待するRユーザーを混乱させます。
多分、私はRから本当に欲しいOOの種類を使用していません。むしろ閉鎖を望んでいます。http://www.lemnica.com/esotericR/Introducing-Closures/もっと見ると、これはもっと詳しく調べられます... –
私を捨てている行に沿ったもう一つのことは、私が何かを設定したときに、特定の「プライベート」スロットを設定したいということです。だから私はメソッドを呼び出すときに、これらのプライベートスロットを変更することがあります –
またはおそらく私はR5が欲しい:https://github.com/hadley/devtools/wiki/R5/bba2424a052f6a9d8bc893a2dfaf9dc178e14ee6 –