2010-08-19 3 views

ответ

7

Было время, когда импорт был public по умолчанию; то есть, когда вы импортировали другой модуль, его содержимое будет не только видимым из вашего модуля, но и из любого модуля, который импортировал ваш модуль.

В конце концов, это было изменено так, что они были private по умолчанию.

Однако, есть несколько причин, чтобы вручную указать private:

  1. Импорт может быть public, если они находятся в public контексте. Например:

    public: 
    
    // Lots of stuff 
    
    import blah; // oh no, everyone can see my imports! 
    
  2. DMD тесемки с ошибками, связанными с импортом. Например, выборочный импорт является общедоступным по умолчанию, несмотря на то, что он предположительно является частным. Это может вызвать всевозможные ужасные сценарии кошмара, где символы (ошибочно), импортированные публично в одном модуле, вызывают символы в совершенно другом модуле, чтобы просто исчезнуть и сломать вашу программу.

Другими словами, они, вероятно, private в танго, потому что разработчики работали с МДД слишком долго, чтобы доверять ему, чтобы получить этот материал право.

+0

+1 ah, right, bugs ... – stephan

+0

re pt 2 Вы говорите о D2 или D1? –

+0

Я не использую D2. Тем не менее, я был бы несколько удивлен, если у D2 нет таких же проблем; dmd 1.x и dmd 2.x построены из одного и того же исходного кода, только с различными предопределенными процессорами. Насколько мне известно, импорт не изменился между 1.x и 2.x. –

4

В D 2.0, private import является синонимом import, в отличие от public import. По умолчанию импорт является приватным. См. Modules documentation

EDIT: По умолчанию импорт также является приватным D 1.0.

Смежные вопросы