[Rd] Error when assigning value in environment which is a locked binding
simon.urbanek at r-project.org
Mon Aug 11 16:41:30 CEST 2014
On Aug 10, 2014, at 10:07 PM, Winston Chang <winstonchang1 at gmail.com> wrote:
> Another oddity - even though there's an error thrown in assignment to
> x$y$z, the assignment succeeds.
> x <- new.env()
> x$y <- new.env()
> lockEnvironment(x, bindings = TRUE)
> x$y$z <- 1
> # Error in x$y$z <- 1 : cannot change value of locked binding for 'y'
> #  1
> So I assume there must be a bug somewhere in here.
In both cases (including your previous post) the you have two separate assignments: (x$y)$z <-1 followed by x$y <- y. So the first one always succeeds since there is no reason for it not to, but the second one doesn't because the binding is locked.
I presume the confusion comes from the fact that environments are mutable, so x$y changes even if it was not assigned so it's irrelevant if the second assignment succeeds or not.
> On Sun, Aug 10, 2014 at 8:46 PM, Winston Chang <winstonchang1 at gmail.com>
>> If an environment x contains a locked binding y which is also an
>> environment, and then you try to assign a value to a binding inside of
>> y, it can either succeed or fail, depending on how you refer to
>> environment y.
>> x <- new.env()
>> x$y <- new.env()
>> lockEnvironment(x, bindings = TRUE)
>> # This assignment fails
>> x$y$z <- 1
>> # Error in x$y$z <- 1 : cannot change value of locked binding for 'y'
>> # Saving x$y to another variable, and then assigning there works
>> y2 <- x$y
>> y2$z <- 10 # OK
>> # 10
>> Is this a bug or a feature? I realize that x$y is a locked binding
>> while y2 is not.
> [[alternative HTML version deleted]]
> R-devel at r-project.org mailing list
More information about the R-devel