From: Stefan Salewski Date: 2011-05-06T04:06:51+09:00 Subject: Cross access between instance variables I am working on a larger Ruby program, where instance variables of one class need access to content of another class -- I wonder how I should solve this problem best. Assume we have multiple fish tanks, each with multiple fishes. The fishes should tell us if they like the temperature of the water. We can solve this task when we gave each fish a reference to its tank: stefan@AMD64X2 ~/pet $ cat fish_tank.rb class Fish def initialize(name, favorite_temperature, tank) @tank = tank @n = name @t = favorite_temperature end def tell_state if @tank.temperature < @t puts 'I feel cold' elsif @tank.temperature = @t puts 'I feel well' else puts 'I feel hot' end end end class Tank attr_accessor :fish attr_reader :temperature def initialize(temperature) @temperature = temperature @fish = Array.new end end t1 = Tank.new(18) f1 = Fish.new('Ruby', 21, t1) t1.fish << f1 t1.fish.each{|f| f.tell_state} I am more familiar with a situation, where the tank is a module, so the fish can access module variables. But now we really need many tanks, each with very many fishes. Currently it seems to be a bit strange giving each of thousands fishes a reference to its tank. Another solution may be to give the .tell_state() function a tank parameter each time when we call it. (A tank-temperature parameter is not a good idea, because we may need more, light, food...) (For my real application the tanks are windows, and fishes are graphical elements in each window, see http://www.ssalewski.de/PetEd-Demo.html.en) Do I miss something? Best regards, Stefan Salewski