2013-10-07 3 views
1

Я ищу что-то вроде private атрибут, работающий не с классами, а с модульными сущностями. Функции, классы, счетчики и т.д.Как предотвратить функцию импортирования из моего модуля?

Например, в Erlang есть атрибут экспорта, который идет как это: -export([fun1, fun2]), имея в виде только fun1 и fun2 всех функций в модуле будет экспортировано. В D все, кажется, экспортируется по умолчанию, что хорошо, но есть ли способ предотвратить что-то конкретное от этого?

ответ

6

В импортируемом модуле вы можете отметить любое частное, чтобы оно не было доступно из других модулей. private работает одинаково на объектах уровня модуля, как и на классах, недоступных вне модуля, используемых внутри модуля. Однако в настоящее время все еще видно, поэтому он может создавать глупые ошибки, такие как «частная функция foo из модуля A, конфликтует с функцией foo из модуля B», заставляя вас устранять неоднозначность имени. (Я, и некоторые другие, надеются получить это изменение в какой-то момент, так как это, очевидно, не должно быть проблемой!)

В модуле, выполняющем импорт, вы не можете сказать «импортировать все, кроме», но вы можете импортировать список конкретных имен без импорта других:

import std.stdio : File, writefln; 

void main() { 
File f; // cool 
writefln("hello"); // cool 
writeln("hey"); // "Error: 'writeln' is not defined" - the selective import didn't pull this name at all 
} 
Смежные вопросы