Как работать с функциональностью внутренней библиотеки в дартс

Я, наверное, усложняю. Но у меня есть библиотека, которую я делаю. Он будет состоять из двух частей: внешних вещей, с которыми может играть любой, и внутренних вещей. Я намерен, чтобы внутренние вещи оставались относительно незаметными, чтобы попытаться сохранить интерфейс в чистоте, о котором легко рассуждать. Итак, вот что я делаю (скажите, безумие это или нет).

Для внешних вещей у меня есть библиотека, а затем все, что должно быть представлено как «часть» этой библиотеки. Для внутренних вещей у меня есть отдельная библиотека «my_library_internal», в которой все классы есть как часть класса внутренней библиотеки.

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

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


person Cogman    schedule 11.04.2014    source источник


Ответы (2)


Как написано в Важные концепции страница документации Dart, как это работает:

  • В отличие от Java, в Dart нет ключевых слов public, protected и private. Если идентификатор начинается с символа подчеркивания (_), он является приватным для своей библиотеки. Подробнее см. в разделе «Библиотеки и видимость». .

Итак, поместите свои внутренние типы в ту же библиотеку, что и общедоступные типы, и добавьте к ним префикс подчеркивания _.

person Jean Hominal    schedule 11.04.2014

Это кажется совершенно нормальным и даже не должно вызывать предупреждений.

Если у вас есть только одна библиотека, вы можете использовать частные члены библиотеки и поместить их все в одну и ту же библиотеку (var _private = foo;), но если у вас есть более одной открытой библиотеки с общими «частными» функциями, наличие общей «скрытой» библиотеки — это самый простой способ сделать это.

Вы не можете на самом деле скрыть общую скрытую библиотеку — если кто-то хочет ее импортировать, он может, но тогда они, вероятно, могут нанести гораздо больший ущерб, используя dart:mirrors, если они этого хотят.

person lrn    schedule 11.04.2014
comment
Это работает, но мне немного больше нравится ответ Джин. Поставив _ перед типами, которые я не хочу раскрывать, я достиг того, к чему стремился. - person Cogman; 11.04.2014