在导入语句中,"显示 "和 "作为 "的区别是什么?[英] What is the difference between "show" and "as" in an import statement?

本文是小编为大家收集整理的关于在导入语句中,"显示 "和 "作为 "的区别是什么?的处理方法,想解了在导入语句中,"显示 "和 "作为 "的区别是什么?的问题怎么解决?在导入语句中,"显示 "和 "作为 "的区别是什么?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

导入语句中show和as有什么区别?

例如,

之间有什么区别
import 'dart:convert' show JSON;

import 'package:google_maps/google_maps.dart' as GoogleMap;

我什么时候使用show,什么时候应该使用as?

如果我切换到show GoogleMap所有引用GoogleMap(例如GoogleMap.LatLng)对象被报告为未定义.

推荐答案

as和show是两个不同的概念.

使用as您正在给导入的库一个名称.通常是为了防止库污染您的命名空间,如果它具有许多全球功能.如果您使用as可以通过以示例中的方式访问它们的方式来访问所有功能和类别:GoogleMap.LatLng.

使用show(和hide),您可以选择要在应用程序中可见的特定类.对于您的示例,将是:

import 'package:google_maps/google_maps.dart' show LatLng;

有了这个,您将能够访问LatLng,但该库中没有其他内容.相反的是:

import 'package:google_maps/google_maps.dart' hide LatLng;

使用此功能,您将能够从该库中访问所有内容,除了LatLng.

如果您想使用多个类别具有相同名称的类,则需要使用as.您还可以结合两种方法:

import 'package:google_maps/google_maps.dart' as GoogleMap show LatLng;

其他推荐答案

show案例:

import 'dart:async' show Stream;

这样,您仅从dart:async导入Stream类,因此,如果您尝试使用Stream以外的其他类,则会丢弃错误.

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
}

as案例:

import 'dart:async' as async;

这样,您可以从dart: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'
}

as通常在导入库中有冲突的类时使用,例如,如果您有一个包含名为Stream的类的库" my_library.dart",并且您还需要从中使用Stream类dart:async,然后:

import 'dart:async';
import 'my_library.dart';

void main() {
  Stream stream = new Stream.fromIterable([1, 2]);
}

这样,我们不知道该流类是来自异步库还是您自己的库.我们必须使用as:

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
}

对于show,我想当我们知道我们只需要特定类时就可以使用.当您导入的库中有冲突的类时,也可以使用.假设在您自己的库中您有一个名为CustomStream和Stream的类,您也想使用dart:async,但是在这种情况下,您只需要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
}

其他推荐答案

as和show库导入语句中使用的关键字.这两个关键字是带有import关键字的可选的,但是使用这些关键字,您可以提供有关图书馆导入的便利性和其他信息.


show

show给出仅访问该库的特定类别的限制.

import 'dart:convert' show JSON;

飞镖上方:转换库包含5种以上类型的转换器. (ASCII,Base64,Latin1,UTF8和JSON是其中的).

但是使用show关键字,您将提供应用程序源文件仅访问JSON Converter类.

警告! : - 如果您尝试访问ASCII,Base64或Latin1等其他任何转换器,则将获得例外. 因为使用show关键字,您只能在该库中只访问JSON类.

因此,如果您的源文件要访问该库中的所有类,则无法定义该库导入的show关键字.


as

为图书馆成员提供其他名称空间.

此as关键字主要是在包含大量全局函数的库时使用的.

  • 您将使用类名和. (点运算符). 例如: - className.staticfun()

  • ,您还将使用对象名称和. (点运算符)例如:-OBJ.InstanceFunc()

  • ,库源文件也可以具有全局函数.我们将以他们的名字访问他们,而无需任何父母会员资格.例如: - func()

因此,当我们访问源文件中其他库的全局函数时,我们没有办法将全局函数识别为其他库的单独函数.

但是使用as关键字,我们可以在访问该库的全局功能之前添加名称空间.

请参见以下示例,以了解as关键字的真正好处.👇

import 'package:http/http.dart' as http;

HTTP库包含许多全局功能.下面显示了HTTP库中的全局功能列表.

 http库全局函数列表

  • 访问http库全局函数上方没有 http namespace.(import 'package:http/http.dart';)

     eg:- 
       1.  get("url")
    
       2.  post("url")
    
  • 使用 http名称空间访问HTTP库全局函数. (import 'package:http/http.dart'as http;)

     eg:- 
       1.  http.get("url")
    
       2.  http.post("url")
    

因此,使用as关键字,可以轻松识别与源文件的全局函数分开的其他库的全局功能.

本文地址:https://www.itbaoku.cn/post/1793894.html