Это классический пример состава против наследования .
В этом конкретном случае:
Является ли команда списком игроков с добавленным поведением
или
Является ли команда собственностью, которая, как оказалось, содержит список игроков.
Расширяя список, вы ограничиваете себя несколькими способами:
Вы не можете ограничить доступ (например, остановить людей, изменяющих список). Вы получаете все методы List, хотите ли вы / хотите их всех или нет.
Что произойдет, если вы хотите иметь списки других вещей. Например, в командах есть тренеры, менеджеры, болельщики, оборудование и т. Д. Некоторые из них вполне могут быть списками в своем собственном праве.
Вы ограничиваете свои варианты наследования. Например, вы можете создать общий объект Team, а затем получить BaseballTeam, FootballTeam и т. Д. Чтобы наследовать из списка, вам нужно наследовать от Team, но это означает, что все команды разных типов вынуждены иметь одну и ту же реализацию этого списка.
Состав - включая объект, дающий поведение, которое вы хотите в своем объекте.
Наследование - ваш объект становится экземпляром объекта, у которого есть поведение, которое вы хотите.
Оба имеют свои применения, но это ясный случай, когда композиция предпочтительнее.
Есть два способа изменить верхний каталог rpmbuild по умолчанию:
Per-User: путем настройки верхнего каталога RPM в $HOME/.rpmmacros
%_topdir %{getenv:HOME}/rpmbuild
Per-Project: Настраивая RPM topdir в Makefile или в командной строке
rpmbuild --define '_topdir build' -ba package.spec
Примечание: в обоих случаях вам нужно убедиться, что в каталоге topdir есть соответствующие каталоги (BUILD, SRPM, RPM, SPECS и SOURCES)
TCL будет должностное лицо в текущем каталоге по умолчанию. Можно изменить текущий каталог при помощи команды TCL http://www.tcl.tk/man/tcl8.4/TclCmd/cd.htm CD, например:
cd ~username
, Если topdir является переменной среды, Вы могли бы быть в состоянии установить его http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 как это:
set env(topdir) whatever/you/want
Моя первая проверка должна была бы удостовериться, что Вы выполняете то же самое. Сделайте эти два на командной строке для проверки, псевдонимы или пути ничего не нарушают.
which rpmbuild
echo 'puts [auto_execok rpmbuild]' | tclsh