From: Robert Klemme Date: 2012-11-08T01:28:35+09:00 Subject: Re: Type confusion: Java vs. Ruby --14dae93409a9b5c65704cdea3589 Content-Type: text/plain; charset=ISO-8859-1 On Wed, Nov 7, 2012 at 5:12 AM, 7stud -- wrote: > > By changing the fields of m, the applet can then change the Security > Manager, > > even though the Security Manager's fields have been declared private. > > > > class Dog > def initialize > @secret = 10 > end > end > > d = Dog.new > puts d.instance_eval("@secret") > > --output:-- > 10 > > d.instance_eval("@secret = 20") > puts d.instance_eval("@secret") > > --output:-- > 20 > Since eval is evil there's also irb(main):006:0> d=Dog.new => # irb(main):007:0> d.instance_variable_get '@secret' => 10 irb(main):008:0> d.instance_variable_set '@secret', 20 => 20 irb(main):009:0> d.instance_variable_get '@secret' => 20 irb(main):010:0> d.instance_variables => [:@secret] Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/ --14dae93409a9b5c65704cdea3589 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable


On Wed, N= ov 7, 2012 at 5:12 AM, 7stud -- <lists@ruby-forum.com> wr= ote:
> By changing the fiel= ds of m, the applet can then change the Security Manager,
> even though the Security Manager's fields have been declared priva= te.



class Dog
=A0 def initialize
=A0 =A0 @secret =3D 10
=A0 end
end

d =3D Dog.new
puts d.instance_eval("@secret")

--output:--
10

d.instance_eval("@secret =3D 20")
puts d.instance_eval("@secret")

--output:--
20

Since eval is evil there's also

irb(= main):006:0> d=3DDog.new
=3D> #<Dog:0x802e9c64 @secret=3D10>=
irb(main):007:0> d.instance_variable_get '@secret'
=3D>= ; 10
irb(main):008:0> d.instance_variable_set '@secret', 20
=3D>= ; 20
irb(main):009:0> d.instance_variable_get '@secret'
= =3D> 20
irb(main):010:0> d.instance_variables
=3D> [:@secret= ]

Kind regards

robert

--
remember.guy do |= as, often| as.you_can - without end
http://blog.rubybestpractices.com/
--14dae93409a9b5c65704cdea3589--