Когда я пишу метод установки в классе, метод установки не меняет значение. Я просто не могу найти ошибку здесь.
point <- function(x,y){
structure(class = "point", list(
# attributes
x = x,
y = y,
# methods
get_x = function() paste("(", x,",",y,")"),
set_x = function(x,y){ self.x = x; self.y = y}
))}
> p <- point(0,1)
> p$get_x()
[1] "( 0 , 1 )"
> p$set_x(6,5)
> p$get_x()
[1] "( 0 , 1 )"
Попробуйте проследить за этим изменением в своем коде.
В функции set_x
значения переменных x
и y
, созданные в функции point
, присваиваются новым значениям с <<-
, а не тем x
и y
, которые существуют в .GlobalEnv
.
point <- function(x, y){
structure(class = "point", list(
x = x,
y = y,
get_x = function() paste("(", x,",",y,")"),
set_x = function(x, y){
x <<- x
y <<- y
}
))
}
x <- 0
y <- 1
p <- point(0,1)
p$get_x()
#[1] "( 0 , 1 )"
p$set_x(6,5)
p$get_x()
#[1] "( 6 , 5 )"
x
#[1] 0
y
#[1] 1
@scs Я не вижу способа решить эту проблему прямо сейчас. Возможно, вы найдете вдохновение в R-intro.pdf, раздел 10.7 Область применения, пример open.account
.
@Barradas: в R нет необходимости определять атрибуты/переменные-члены, поскольку эти значения хранятся в параметрах. Таким образом, определения x и y можно просто опустить в определении класса, чтобы избежать путаницы. Пример open.account иллюстрирует это.
@scs Да, я полагал, что вы хотите, чтобы они возвращались функцией point
. В этом случае они будут членами p
и недоступны для p$set_x
.
Если я вызову функцию set_x, используя ваше решение, p$x и p$y сохранят старые значения 1 и 0.