2013-06-24 6 views
1

Предположим, у меня есть три класса: A, B и C.Получите экземпляр, на котором был создан другой экземпляр

создать экземпляр C на примере A, и экземпляр B:

class A; end 
class B; end 
class C; end 

a = A.new 
b = B.new 

a.c = C.new 
b.c = C.new 

Могу ли я получить к родителю каким-то образом? Например:

a.c.parent #=> instance of A (a == a.c.parent) 
b.c.parent #=> instance of B (b == b.c.parent) 

Существует ли что-то подобное?

+2

Что такое 'a.c' и' b.c'? Я пытаюсь угадать, но не могу .. пожалуйста, вы должны сказать. –

+0

Похоже, что вам не хватает методов getter/setter :( – rthbound

+1

Между вашими классами нет реальных отношений. C не является подклассом A и B. Здесь вы просто хотите имитировать это поведение или хотите C быть реальным подклассом? –

ответ

7

Так как в вашем примере, A.c= пока не определена в любом случае, вы можете определить это нравится:

class A 
    attr_reader :c 

    def c=(x) 
    @c = x 
    x.parent = self 
    end 
end 

и определить attr_accessor :parent в классе C.

В Ruby нет отношения «собственности», поэтому вы должны сами его моделировать.

+1

Вы хотите, чтобы это было 'x.parent = self' –

+0

Спасибо, Дэн. Исправлена. –

+0

Отличный ответ! Благодаря! Жаль, что этого не существует, но это довольно просто настроить в любом случае .. :) –