-1
У меня есть два класса:поделитесь переменным экземпляром с другим классом
class Zoo
def initialize(visitor)
@visitor = visitor
end
def elephant
Elephant
end
end
class Elephant
def self.all
[:e1, :e2, :e3].reject_if { |e| @visitor.has_seen?(e) }
end
end
Очевидно, что приведенный выше пример не будет работать.
Есть ли способ, чтобы выразить это, так что я могу назвать:
Zoo.new(:visitor_1).elephant.all
и доступ @visitor
внутри метода Elephant
класса?
Совершенно не ясно, что вы делаете. – sawa
Извините, если не ясно, в нижней строке я хочу написать: 'Zoo.new (: visitor_1) .elephant.all'. 'Zoo' и' Elephant' должны быть разными классами, а 'Elephant' нуждается в доступе к переменной экземпляра' @ visitor' в методах класса. – user1032752
Невозможно сделать это. Одна из причин заключается в том, что Ruby не разрешает доступ к переменной экземпляра без доступа или интроспекции; другой - если вы делаете 'z1 = Zoo.new (: v1); z2 = Zoo.new (: v2); Elephant.all', который '@ visitor' следует искать? То есть как слон знает, где он? Это не имеет никакого смысла. Если вы дали нам реальное приложение, которое вам нужно вместо плохой метафоры зоопарка, мы могли бы предложить альтернативный дизайн. – Amadan