Mixins and variables


#1

Hi,
I’m new to Ruby, and trying to figure out how the inheritance/mixin
works:
I can’t figure out how to set an instance variable with a mixin method
from the object’s initialize().

Example:

module TestMod
def x
@x
end
def x=(arg)
@x=arg
end
end

class TestClass
include TestMod
def initialize
x=(‘alpha’)
printf(“x=%s\n”, x)
end
end

irb(main)…>tmp=TestClass.new
x=alpha # x is set inside constructor
=> #TestClass:0x37d9520
irb(main)…>tmp.x
=> nil # x is unset on the returned object

Does anyone know why it doesn’t work? What can I do instead?


#2

On Dec 6, 2005, at 11:06 PM, Johannes F. wrote:

Hi,
I’m new to Ruby, and trying to figure out how the inheritance/mixin
works:
I can’t figure out how to set an instance variable with a mixin method
from the object’s initialize().

I see you have your answer, so let me just make some general comments:

Example:

module TestMod
def x
@x
end
def x=(arg)
@x=arg
end

You can replace the last six lines with:

attr_accessor :x

end

class TestClass
include TestMod
def initialize
x=(‘alpha’)

self.x = ‘alpha’ # as discussed, or just @x = ‘alpha’

printf("x=%s\n", x)

And we would usually write that as:

puts “x=#{x}”

end
end

Hope that gives you an idea or two.

James Edward G. II