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'

x$y$z
# [1] 1


So I assume there must be a bug somewhere in here.

-Winston



On Sun, Aug 10, 2014 at 8:46 PM, Winston Chang <winstonchang1@gmail.com>
wrote:

> 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
> print(x$y$z)
> # 10
>
>
> Is this a bug or a feature? I realize that x$y is a locked binding
> while y2 is not.
>
> -Winston
>

	[[alternative HTML version deleted]]

