initialize
es privado:
$ cat -n calling_initialize.rb 1 class Tutu 2 def initialize(a,b) 3 @a, @b = a,b 4 end 5 6 def titi 7 initialize(2,3) 8 end 9 end 10 if __FILE__ == $0 11 x = Tutu.new(4,5) 12 z = x.titi() 13 puts z.class 14 puts z 15 x.initialize(4,2) 16 end
casiano@exthost:~/LPPsrc/151012$ ruby calling_initialize.rb Array 2 3 calling_initialize.rb:15:in `<main>': private method `initialize' called for #<Tutu:0x8bb576c @a=2, @b=3> (NoMethodError) casiano@exthost:~/LPPsrc/151012$
The instance variables of an object can only be accessed by the instance methods of that object. Code that is not inside an instance method cannot read or set the value of an instance variable
Aviso a los programadores Java:
casiano@exthost:~/LPPsrc/151012$ cat -n instance_variables_of_a_class.rb 1 class Tutu 2 @x = 4 3 @y = 9 4 5 def initialize(x,y) 6 @x, @y = x, y 7 end 8 def self.x 9 @x 10 end 11 12 def self.y 13 @y 14 end 15 16 def x 17 @x 18 end 19 20 def y 21 @y 22 end 23 end 24 25 if __FILE__ == $0 26 puts Tutu.x # 4 27 puts Tutu.y # 9 28 z = Tutu.new(5,7) 29 puts z.x # 5 30 puts z.y # 7 31 end
casiano@exthost:~/LPPsrc/151012$ ruby instance_variables_of_a_class.rb 4 9 5 7
self
.
initialize
method is invoked, self
holds an instance of the Tutu
class.
Tutu
class.
self
refers to the Tutu
class itself
, not to an
instance of the class.
@x
and @y
variables inside the initialize
method are completely different from those outside it.
Casiano Rodriguez León 2015-01-07