В чем разница между "показать" и " как " при импорте?
Например, что's разница между
import 'dart:convert' show JSON;
и
import 'package:google_maps/google_maps.dart' as GoogleMap;
Когда я использовать Show
и когда я должен использовать как
?
Если я переключаюсь на шоу расчет
все ссылки на расчет
(например, внесите.Объектов latlng с
) отображаются как неопределенные.
как
и Show
это два разных понятия.
С " как " вы даете импортированные библиотеки имени. Это'ы обычно делается, чтобы предотвратить библиотеки от загрязнения пространства имен, если оно имеет много глобальных функций. Если вы используете как
вы можете получить доступ ко всем функциям и классам заявил, открывая их, как вы сделали в вашем примере библиотеки: внесите.Latlng с
.
С шоу
(и скрыть
) вы можете выбрать конкретные классы, которые вы хотите быть видны в приложении. Для вашего примера это будет:
import 'package:google_maps/google_maps.dart' show LatLng;
С этим вы сможете получить доступ к latlng С
, но ничего из этой библиотеки. Противоположностью этому является:
import 'package:google_maps/google_maps.dart' hide LatLng;
С этим вы сможете получить доступ к все из библиотеки, кроме latlng с
.
Если вы хотите использовать несколько классов с одинаковыми именами, вы'd нужен, чтобы использовать как
. Вы также можете совместить оба подхода:
import 'package:google_maps/google_maps.dart' as GoogleMap show LatLng;
"показать" случай:
импорт 'дротика:асинхронный' стрим-шоу;
Таким образом, вы только импорт поток
класс `Дарт:асинхронный, поэтому если вы попытаетесь использовать другой класс от дротика:асинхронный, кроме "поток", он будет выдавать ошибку.
void main() {
List data = [1, 2, 3];
Stream stream = new Stream.fromIterable(data); // doable
StreamController controller = new StreamController(); // not doable
// because you only show Stream
}
как пример:
импорт 'дротика:асинхронный' а асинхронный;
Таким образом, вы импорт всех классов из Дарт:async
и пространством с ключевое слово async
.
void main() {
async.StreamController controller = new async.StreamController(); // doable
List data = [1, 2, 3];
Stream stream = new Stream.fromIterable(data); // not doable
// because you namespaced it with 'async'
}
как
обычно используется, когда есть конфликтующие классы в импортируемых библиотек, например, если у вас есть библиотека 'my_library.Дарт', который содержит класс с именем поток
и вы хотите использовать поток
класса с Дарт:async
и тогда:
import 'dart:async';
import 'my_library.dart';
void main() {
Stream stream = new Stream.fromIterable([1, 2]);
}
Таким образом, мы не'т знать, является ли этот класс потока от асинхронного библиотеку или свою собственную библиотеку. Мы должны использовать как
:
import 'dart:async';
import 'my_library.dart' as myLib;
void main() {
Stream stream = new Stream.fromIterable([1, 2]); // from async
myLib.Stream myCustomStream = new myLib.Stream(); // from your library
}
Для "показать", я предполагаю, что это используется, когда мы знаем, что мы нужны только определенному классу. Также может быть использован, когда есть конфликтующие классы в импортируемых библиотек. Позвольте'ы сказать в свою собственную библиотеку, у вас есть класс с именем CustomStream
и поток
, и вы также хотите использовать `Дарт:асинхронный, но в этом случае вам только нужно CustomStream из собственной библиотеки.
import 'dart:async';
import 'my_library.dart';
void main() {
Stream stream = new Stream.fromIterable([1, 2]); // not doable
// we don't know whether Stream
// is from async lib ir your own
CustomStream customStream = new CustomStream();// doable
}
Некоторые обходной путь:
import 'dart:async';
import 'my_library.dart' show CustomStream;
void main() {
Stream stream = new Stream.fromIterable([1, 2]); // doable, since we only import Stream
// async lib
CustomStream customStream = new CustomStream();// doable
}