Почему topdir установлен на свое значение по умолчанию когда rpmbuild, названный от tcl?

Это классический пример состава против наследования .

В этом конкретном случае:

Является ли команда списком игроков с добавленным поведением

или

Является ли команда собственностью, которая, как оказалось, содержит список игроков.

Расширяя список, вы ограничиваете себя несколькими способами:

  1. Вы не можете ограничить доступ (например, остановить людей, изменяющих список). Вы получаете все методы List, хотите ли вы / хотите их всех или нет.

  2. Что произойдет, если вы хотите иметь списки других вещей. Например, в командах есть тренеры, менеджеры, болельщики, оборудование и т. Д. Некоторые из них вполне могут быть списками в своем собственном праве.

  3. Вы ограничиваете свои варианты наследования. Например, вы можете создать общий объект Team, а затем получить BaseballTeam, FootballTeam и т. Д. Чтобы наследовать из списка, вам нужно наследовать от Team, но это означает, что все команды разных типов вынуждены иметь одну и ту же реализацию этого списка.

Состав - включая объект, дающий поведение, которое вы хотите в своем объекте.

Наследование - ваш объект становится экземпляром объекта, у которого есть поведение, которое вы хотите.

Оба имеют свои применения, но это ясный случай, когда композиция предпочтительнее.

26
задан serenesat 17 April 2015 в 14:03
поделиться

3 ответа

Есть два способа изменить верхний каталог rpmbuild по умолчанию:

  1. Per-User: путем настройки верхнего каталога RPM в $HOME/.rpmmacros

    %_topdir %{getenv:HOME}/rpmbuild
    
  2. Per-Project: Настраивая RPM topdir в Makefile или в командной строке

    rpmbuild --define '_topdir build' -ba package.spec
    

Примечание: в обоих случаях вам нужно убедиться, что в каталоге topdir есть соответствующие каталоги (BUILD, SRPM, RPM, SPECS и SOURCES)

91
ответ дан 28 November 2019 в 06:05
поделиться

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
1
ответ дан Joseph Bui 28 November 2019 в 06:05
поделиться

Моя первая проверка должна была бы удостовериться, что Вы выполняете то же самое. Сделайте эти два на командной строке для проверки, псевдонимы или пути ничего не нарушают.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh
1
ответ дан Donal Fellows 28 November 2019 в 06:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: