I’m trying to understand this:
module A
def a=(num)
@a = num % 2
end
def b(num)
@b = num % 2
end
end
class B
include A
def initialize(num)
a = num
b(num)
end
end
class C
include A
def initialize(num)
self.a = num
self.b(num)
end
end
b = B.new 10 # => #<B:0x007ffb27497f58 @b=0>
b.instance_variables # => [:@b]
b.a = 10 # => 10
b.instance_variables # => [:@b, :@a]
c = C.new 10 # => #<C:0x007ffb2755e798 @a=0, @b=0>
c.instance_variables # => [:@a, :@b]
Why the “assignment-like” method needs a “self” when the class is
initializated and the others methods don’t?
Thanks!
panchiz
The interpreter looks at “a = num” and assumes that you’re referring to
a local variable “a”, rather than the method “a=”.
I thought that the interpreter should have loaded up all the methods but
seems logic what you are pointing.
Thanks
On Tue, Dec 10, 2013 at 5:15 PM, panchiz D. [email protected]
wrote:
I thought that the interpreter should have loaded up all the methods but
seems logic what you are pointing.
It does not have to do with “loading methods” or such. It is purely
syntactical: the moment the parser sees an assignment without a
qualifier (dot) it parses this as a local variable assignment and the
local variable is known from that line on.
$ ruby -e ‘def a;puts “a called”; 99 end;p a; p defined?(a); a=8; p a;
p defined?(a)’
a called
99
“method”
8
“local-variable”
Kind regards
robert