перейти к пути и затем tar?

Поскольку ваша проблема в основном стилистическая (не желая заполнять конструктор кучей объявлений), ее можно решить и стилистически.

На мой взгляд, во многих языках на основе классов конструктор представляет собой функцию, названную в честь самого имени класса. Стилистически мы могли бы использовать это для создания класса ES6, который стилистически все еще имеет смысл, но не группирует типичные действия, выполняемые в конструкторе, со всеми объявлениями свойств, которые мы делаем. Мы просто используем фактический конструктор JS в качестве «области объявления», а затем создаем класс с именем function, который в противном случае мы рассматриваем как область «другого конструктора», вызывая его в конце истинного конструктора.

"use strict";

class MyClass
{
    // only declare your properties and then call this.ClassName(); from here
    constructor(){
        this.prop1 = 'blah 1';
        this.prop2 = 'blah 2';
        this.prop3 = 'blah 3';
        this.MyClass();
    }

    // all sorts of other "constructor" stuff, no longer jumbled with declarations
    MyClass() {
        doWhatever();
    }
}

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

Что-то вроде двух конструкторов, в которых вы отделяете объявления и другие действия конструктора, которые вы хотите выполнить, и стилистически упрощает понимание того, что происходит тоже.

Я считаю, что это хороший стиль, который нужно использовать при работе с множеством объявлений и / или множеством действий, которые должны произойти при создании экземпляра и которые хотят отличить две идеи друг от друга.


ПРИМЕЧАНИЕ : Я очень целенаправленно не использую типичные идиоматические идеи «инициализации» (например, метод init() или initialize()), потому что они часто используются по-разному. Существует некоторая предполагаемая разница между идеей конструирования и инициализации. Работая с конструкторами, люди знают, что они вызываются автоматически как часть реализации. Видя метод init, многие люди без малейшего взгляда предполагают, что им нужно что-то делать в форме var mc = MyClass(); mc.init();, потому что именно так вы обычно инициализируете. Я не пытаюсь добавить процесс инициализации для пользователя класса, я пытаюсь добавить в процесс конструирования самого класса.

Хотя некоторые люди могут сделать двойной дубль на мгновение, в этом-то и кроется смысл: они сообщают им, что намерение является частью конструкции, даже если это заставляет их делать двойной дубль и идти «Это не так, как работают конструкторы ES6», и посмотрим на фактический конструктор, чтобы понять: «О, они называют это снизу, я вижу», это гораздо лучше, чем НЕ сообщать об этом намерении (или неправильно сообщать его) и, вероятно, получить многие люди используют его неправильно, пытаясь инициализировать его извне и мусор. Это очень преднамеренно для модели, которую я предлагаю.


Для тех, кто не хочет следовать этому шаблону, может работать и обратное. Передайте объявления в другую функцию в начале. Может быть, назовите его «свойства» или «publicProperties» или что-то. Затем поместите остальные вещи в обычный конструктор.

"use strict";

class MyClass
{
    properties() {
        this.prop1 = 'blah 1';
        this.prop2 = 'blah 2';
        this.prop3 = 'blah 3';
    }

    constructor() {
        this.properties();
        doWhatever();
    }
}

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

5
задан laalto 2 July 2009 в 08:05
поделиться

4 ответа

Вы пробовали это:

tar zvPcf /home/test/backups/backup.tar.gz /home/test/backups/../data/
6
ответ дан 18 December 2019 в 09:52
поделиться

Вы можете попробовать:

tar zvPcf backup.tar.gz ../data/ -C '/ home / test / backups /'

1
ответ дан 18 December 2019 в 09:52
поделиться

см. Параметр -C.

справочная страница tar дает следующий пример:

   tar -xjf foo.tar.bz2 -C bar/
          extract bzipped foo.tar.bz2 after changing directory to bar

может быть тем, что вы ищете ...

9
ответ дан 18 December 2019 в 09:52
поделиться

См. страницу руководства tar (1) .

-C, --directory DIR
переход в каталог DIR

1
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

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