ライブラリはファイルの先頭に #library ディレクティブを指定して作成します。
mylib.dart
#library('my_greeting_lib'); class Greeting { void hello(String name) => print('Hello, ${name}!'); }作成したライブラリは別のコードから #import ディレクティブを使ってインポートし、使用します。
#import('mylib.dart'); main() { Greeting g = new Greeting(); g.hello('world'); // Hello, world! }ただしこのままですと、複数のライブラリで同じ名前のクラスが定義されていたときに混乱してしまいます。そこでライブラリをインポートするときにはプレフィックス(接頭子)を指定できます。mylib.dart以外のライブラリをインポートするときに別のプレフィックスを指定すれば、そのライブラリが別のGreetingクラスを定義していたとしても、混乱せずに使い分けることができます。
#import('mylib.dart', prefix:'mylib'); main() { mylib.Greeting g = new mylib.Greeting(); g.hello('world'); // Hello, world! }ライブラリとしてではなく、コードの一部として別のファイルを取り込むには、#source ディレクティブを使用します。ライブラリとして取り込むと取り込んだ側のコードのスコープから見えるようになるだけですが、ソースとして取り込むと取り込んだ側のコードの一部として扱われ、プライベートとして指定していないと取り込んだライブラリの外にも公開されます。
mysource.dart
class MySouce {}mynestedlib.dart
#library('my_nested_lib'); class MyNestedLib {}mylib.dart
#library('my_lib'); #import('mynestedlib.dart'); #source('mysource.dart'); class Greeting { void hello() { new MySource(); // OK new MyNestedLib(); // OK } }
#import('mylib.dart', prefix:'mylib'); main() { new mylib.Greeting.hello(); // OK new mylib.MySource(); // OK new mylib.MyNestedLib(); // NG }なお、ライブラリの中でもトップレベルのmain関数を含むものをスクリプトと呼びます。
こちらもどうぞ
0 件のコメント:
コメントを投稿