シグネチャ
{import
[access]
[explicit-names from]
PACKAGE-NAME
[, using-name=LOCAL-NAME ]
[, override?:bool = false ]
[, location= {url "path"} ]
[, id="ComponentID-string" ]
[, transitive-id="ComponentID-string" ]
[, version=version ]
[, name = value ] ...
}
他の Package 内の名前を現在のパッケージで使用可能にします。
access: は、public または package のどれかであることが必要です。指定がない場合は、package が既定になります。これは、インポートされた名前のアクセス レベルをコントロールします。public に設定すると、インポートされたシンボルはすべて、現在のパッケージをインポートするパッケージに 再エクスポートされます。
explicit-names: パッケージから名前空間へ直接インポートする名前を指定します。それ以外の場合は、インポートされた名前を参照する唯一の方法として、パッケージ名で修飾します(または、
LOCAL-NAME を指定します)。この場合、次のフォームのどれかを使用する必要があります。
*
この式の型は、暗黙的インポートと呼ばれます。パッケージのすべてのパブリック名が、ローカルの名前空間に暗黙的にインポートされます。
この場合、複数のパッケージがこの方法でインポートされると、あいまいな名前の参照が発生する可能性があります。複数のパッケージから暗黙的にインポートされた名前への参照が試行され、それが同じオブジェクトを参照しない場合は、コンパイラが
AmbiguousNameError を生成します。このエラーを回避するには、名前をパッケージ経由で参照するか、または
define-alias を使用してエイリアスを設定します。
public アクセスを使用して 2 個のパッケージを両方ともインポートした場合は、現在のパッケージが名前を参照しなくてもあいまいな名前のエラーが発生することがあることに注意してください。
override? オプションも参照してください。
name [as alias]
[, ...]
ローカルでバインドする名前の明示的なリスト。これらの名前は、暗黙的にインポートされた名前より優先します。明示的にインポートされた名前は、パッケージ内で後で再定義できません。再定義を試行すると構文エラーになります。import に明示的な名前を指定した場合、パッケージの名前は using-name キーワードも指定しない限りバインドされません。
alias を指定した場合は、オリジナル名の代わりにそのエイリアスがローカルでバインドされる名前として使用されます。次の例を参照してください。
PACKAGE-NAME: インポートするパッケージの名前。パッケージ名は、インポートされるパッケージの
package 宣言内で使用されている名前とマッチすることが必要です。
using-name キーワードでオーバーライドされない限り、これが、コードのインポートでローカルにバインドされる名前です。
using-name: は、実際の PACKAGE-NAME の代わりに使用される、パッケージの代替ローカル名を指定します。
override?: true の場合は、{import * from ...} を使用して暗黙的に名前をインポートし、あいまいな名前のエラーを発生させずに以前に暗黙的インポートされた名前をオーバーライドします。予想外の結果が発生する可能性があるので、このオプションの使用は最低限に抑えてください。
location: パッケージのインスタンスの可能な場所を指定します。これは 1 つの
import ステートメント内で複数回使用できます。
引数は、
url ステートメント、絶対 URL を含む文字列、または、
url ステートメントで受け取られるのと同様なソースコード インポートの URL の相対パスのいずれかです。location 引数は、標準の Curl API パッケージのインポートでは必要ありません。
ロケーションを指定すると、既にキャッシュに格納されている場合もありますが、その指定ロケーションからパッケージが必ずロードされます。これは、location 引数のどれかが、
source-url-name、 または、インポートされたパッケージのメタデータの
origin-url-names のどれかとマッチすることを意味します。[
注意:Curl API の以前のバージョンでは、この保証はサポートされていません。]
Windows のネイティブ パスは("C:\mystuff\mypackage.scurl" など)、絶対 URL ではなく相対パスとして扱われるので予想通りに動作しません。これらのパスは "file:///" のプレフィックスを付けて絶対 URL にすることが必要です。
ロケーションが指定されない場合は、既定のコンポーネント マニフェスト(
get-default-manifest を参照)を調べて、パッケージ名とこの
import ステートメントで指定された他の属性に基づいて、パッケージのロケーションに関する情報が取得されます。
id: インポートするパッケージの
id を指定します。
version: インポートするパッケージのバージョンを指定します。これは、次の形式の文字列として指定することをお勧めします。
"n.n...n" または "n.n...n+"
ターゲットのパッケージとマッチするバージョン番号は、バージョン コンポーネントの最後の数字までが同じ場合です。バージョン番号の後に "+" を追加すると、ターゲット パッケージ内のバージョンの最後の数字が指定の数字より大きいバージョン番号ともマッチします。
次に例を示します。
説明
インポートが成功すると、次の例外を除いて、インポートされたパッケージがその
PACKAGE-NAME にバインドされます。
- using-name で代替の LOCAL-NAME を指定した場合、その名前が PACKAGE-NAME の代わりに使用されます。
- from 句で明示的な名前のリストが指定され、using-name 指定子が指定されていない場合は、パッケージはどのローカル名にもバインドされません。
この名前は、次の例に示されているように、パッケージのパブリック メンバにアクセスする際に使用できます。またメタデータへのアクセスを取得するために、名前を
Package オブジェクトにキャストできます(次を参照してください)。
import はトップレベルのコードでのみ使用できます。
import はコード ブロック内では使用できません。 同じファイル内で同じパッケージを複数回インポートできます。
パッケージとインポートについての詳細は、『開発者ガイド』の「
パッケージ」のセクションを参照してください。
プログラミング注意事項
インポートしたシンボルを、現在のパッケージをインポートした任意のパッケージからアクセス可能にするには、
public アクセスを使用します。アプレットでパブリック インポートを使用しても、アプレットはインポート不可能なため意味がありません。パブリックのインポートは通常、"superpackages" を作成する際に使用します。"superpackages"の主な目的は、他の複数のパッケージの API を組み合わせることです。たとえば、標準の Curl API パッケージ
CURL.GUI.STANDARD は、このテクニックを使用して、他のより細かいさまざまなパッケージのコンテンツを再エクスポートします。
バージョン、識別子(id)、推移識別子(transitive id) など名前以外の属性が異なる限り、同じ名前で異なるパッケージをインポートすることができます。この場合、using-name ディレクティブを使用して、パッケージにバインドされた名前同士の衝突を回避することが必要な場合があります。
override? は限定的に使用することが必要です。これは、意図しないときに以前のバージョンの代わりにオーバーライド パッケージのコードを使用せざるを得ない結果につながる場合があります。オーバーライドは、Curl GUI API の標準バージョンの代わりにテキスト書式や他のグラフィック オブジェクトを指定する目的で、パッケージをインポートする場合に最適に使用できます。
実行時までどのパッケージのインポートが必要か不明な場合、また、パフォーマンスの理由でパッケージのロードを遅らせたい場合などは、
import-package 関数を使用してください。
import-package と異なり、この構文は
manifest キーワードを使用して代替のコンポーネント マニフェストを指定することはできません。
例
例:
import を使用したシンボルのインポート |
![](examples/example-1059.jpeg) |
|| This only imports the name 'e' from the
|| specified package:
{import e from CURL.LANGUAGE.MATH-CONSTANT}
e == {value e}
|| This imports 'nan' from the package, but giving it
|| local name 'not-a-number':
{import nan as not-a-number from CURL.LANGUAGE.MATH-CONSTANT}
not-a-number == {value not-a-number}
|| This imports the name of the package itself:
{import CURL.LANGUAGE.MATH-CONSTANT}
pi == {value CURL.LANGUAGE.MATH-CONSTANT.pi}
|| This implicitly imports all public members
|| of the package, and binds the package to
|| an alternate name:
{import * from CURL.LANGUAGE.MATH-CONSTANT,
using-name = CONSTANTS
}
ln 2 == {value ln-of-2}
ln of 10 = {value CONSTANTS.ln-of-10}
| |
例:
インポートされたパッケージのメタデータへのアクセス |
![](examples/example-1060.jpeg) |
{import CURL.LANGUAGE.MATH-CONSTANT,
using-name = CONSTANTS
}
package name == {value (CONSTANTS asa Package).name}
{let package:Package = CONSTANTS}
package version == {value package.meta-data.version}
| |
例:
import の override? と location キーワードを使用 |
![](examples/example-1061.jpeg) |
|| Import personalized text formats, overriding
|| the standard ones. Note that location specifiers
|| referring to non-existent files will be ignored.
{import * from MY-TEXT-FORMATS,
override? = true,
version = "1.0",
vendor = "Foobar Corporation",
location = {url "file:///does-not-exist.scurl"},
location = {url "file:///also-does-not-exist.scurl"},
|| There is really no reason to ever import a
|| package from a string URL like this. We
|| only use it here so that the example is
|| entirely self-contained.
location = {url
|"curl://string/
{curl 8.0 package}
{package MY-TEXT-FORMATS,
version = "1.0",
vendor = "Foobar Corporation"
}
{import CURL.GUI.TEXT-FORMATS}
|| Override the standard meaning of 'bold'
{define-text-format public bold as
CURL.GUI.TEXT-FORMATS.bold with color = "red"
}
"|}
}
{bold This is bold}
| |