2014-01-20 2 views
2

У меня есть класс, который я хочу использовать при использовании двух разных имен. Единственный способ, которым я могу думать, это сделать.Имена псевдонимов классов в Ruby

class Entrance 

    def open 
    puts "the door is open" 
    end 

end 

class Exit < Entrance 
end 

Дело в том, что в этом примере я хочу представить, что вход и выход являются точно то же самое, а не о том, что выход есть тип входа. Есть ли лучший способ представить это?

+0

Зака, после того, как 'Выход = Entrance', вы можете иметь' Вход = nil' или 'Вход = SomethingElse' (не затрагивая' Exit'), хотя Руби хлопнет руку с предупреждением, что вы изменило определение «Вход». –

ответ

8

Легко и просто:

Exit = Entrance 

Классы в Ruby, действительно только объекты класса Class, которые назначены постоянные с их именем. Итак, просто добавьте новую константу к тому же объекту, что и старая константа.

Обратите внимание, что в настоящее время Выход и вход в тот же класс точное, и все, что вы делаете, чтобы одно происходит с другой стороны:

2.0.0p0 :009 > Exit.object_id == Entrance.object_id 
=> true 

Примечание: В то время как это возможно, я думаю, что более тщательно о вашей общей архитектуры. Есть ли разница между входом и выходом? Действительно ли они оба действительно Двери? Ваша архитектура должна быть такой, что классы не будут (обычно) нуждаться в псевдониме, если у вас нет двух синонимичных имен, которые вы действительно хотите использовать оба варианта, например Page и WebPage (я бы рекомендовал и против этого).

+0

Great Point, я строю слой абстракции теста, где два класса действительно делают то же самое. Это упростит использование менее технических типов для устранения неполадок. Реальное использование мира - это «Добавить» и «Изменить» для определенного типа ресурсов. – Zach

+0

@ Zach: Мне кажется непонятным. Не добавлять ли добавить новый ресурс и редактировать только редактировать существующие? – Linuxios

+0

Да, но при автоматизации страницы элементы абсолютно одинаковы. Как только вы попадаете в форму, которая добавляет или редактирует ресурс, единственная разница в тестируемом приложении находится в верхней части страницы и URL-адреса. – Zach

0

Может быть, добавить новый класс - Дверь. Выход < Дверь, вход < Дверь.

+2

Это не отвечает на заданный вопрос. -1 – Doorknob

2

В классах Ruby также есть Object. Так что вы можете сделать, как показано ниже:

Exit = Entrance 

Помните, что не означает, что ваш класс Entrance теперь имеют другое имя, которое Exit. Скорее Exit является константой, которая теперь содержит ссылку на объект класса Entrance.

Entrance.name # => "Entrance" 
Exit.name # => "Entrance" 
Exit.object_id == Entrance.object_id # => true 
1

Вы можете назначить постоянное имя, как и все остальное.

class Entrance; end 
Exit = Entrance 
Смежные вопросы