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

StackOverflow https://stackoverflow.com//questions/23020831

  •  21-12-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top