2013-11-01 2 views
9

수입 명세서에 showas의 차이점은 무엇입니까? 예를 들어import 문에서 "show"와 "as"의 차이점은 무엇입니까?

,

import 'dart:convert' show JSON; 

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

내가 as를 사용해야 할 때 내가 show를 사용합니까 사이의 차이점은 무엇입니까?

show GoogleMap으로 전환하면 GoogleMap (예 : GoogleMap.LatLng)에 대한 모든 참조가 정의되지 않은 것으로보고됩니다.

답변

17

asshow은 두 가지 다른 개념입니다.

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;

당신이 Stream 이외의 dart:async에서 다른 클래스를 사용하려고, 그래서 만약 당신이 단지, 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 키워드를 네임 스페이스 이런 식으로. 가져온 라이브러리에 충돌하는 클래스가있을 때 당신이 라이브러리 'my_library이있는 경우

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라는 이름의 당신은 또한 다음 dart:async으로부터 Stream 클래스를 사용하려면 포함 다트 '

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를 들어, 나는 우리가 우리가 단지 특정 클래스가 필요 알고 때를 사용하는 것 같아요. 가져온 라이브러리에 충돌하는 클래스가있는 경우에도 사용할 수 있습니다. 자신의 라이브러리에서 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 
}