2013-11-01 56 views
9

導入語句中showas之間的區別是什麼?導入聲明中「show」和「as」有什麼區別?

例如,什麼是

import 'dart:convert' show JSON; 

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

什麼時候使用show當我應該使用as之間的區別?

如果我切換到show GoogleMap所有對GoogleMap(例如GoogleMap.LatLng)對象的引用都會報告爲未定義。

回答

17

asshow是兩個不同的概念。

With 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; 
3

show情況:

import 'dart:async' show Stream;

這樣,你只能從dart:async導入Stream類,因此,如果您嘗試使用另一個類從dart:async以外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如果你有一個圖書館my_library通常是用來當你導入庫是相互矛盾的類,例如。鏢」,它包含一個名爲類和Stream你也想用Stream類從dart:async然後:

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

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

這樣,我們不知道這個Stream類是來自異步庫或您自己的庫。我們必須使用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,我想,當我們知道我們只需要一個特定的類時使用。也可以在導入庫中存在衝突的類時使用。比如說,在您自己的圖書館中,您有一個名爲CustomStreamStream的課程,您也希望使用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 
} 
相關問題