정말 사용 사례를 이해하지 않지만 ... 구문
같은
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 –