97

import ステートメントのshowとの違いは何ですか?as

たとえば、次の違いは何ですか

import 'dart:convert' show JSON;

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

いつ使用showし、いつ使用する必要がありますasか?

(たとえば) オブジェクトへshow GoogleMapのすべての参照に切り替えると、未定義として報告されます。GoogleMapGoogleMap.LatLng

4

3 に答える 3

187

asshowは 2 つの異なる概念です。

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;
于 2013-11-01T08:47:08.583 に答える
20

show場合:

import 'dart:async' show Stream;

Streamこの方法では、からのみクラスをインポートするため、それ以外のdart:async別のクラスを使用しようとすると、エラーがスローされます。dart:asyncStream

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.dart' があり、class fromStreamも使用したい場合などです。Streamdart: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、これは特定のクラスのみが必要であることがわかっている場合に使用されると思います。インポートしたライブラリに競合するクラスがある場合にも使用できます。CustomStream独自のライブラリにandという名前のクラスがあり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
}
于 2013-11-02T08:43:53.637 に答える