import-package (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

パッケージを動的にロードします。

シグネチャ

{import-package
    selector:ComponentSelector,
    manifest:ComponentManifest =
        {get-default-manifest},
    source-info:#SourceLocation = null,
    jit-ok?:bool = true
}:Package
selector: ロードされるパッケージを識別する ComponentSelector
manifest:
このパッケージを見つけるのに使うマニフェスト (必要な場合)。manifest は、import-manifestget-default-manifest または get-empty-manifest の呼び出しにより取得しておく必要があります。
指定しない場合は既定のマニフェストが使われます (get-default-manifest を参照)。
source-info: 指定された場合には、エラーの発生場所に関する情報を構文エラーに追加するのに使用されます。これが設定された場合は ComponentLocationException がキャッチされて構文エラーに渡されます。それ以外の場合はキャッチされません。
jit-ok?: JIT コンパイル パッケージを許可します。このパラメータは将来削除される可能性があります。

戻り値

ロードされた Package オブジェクト。

説明

この関数は、selector で指定されたパッケージを動的に検索し、ロードおよび初期化を実行します。

指定された selectorlocation-hints が含まれていない場合、既定のコンポーネント マニフェスト (get-default-manifest を参照) を参照してパッケージの場所を確認します。

import 構文とは異なり、import-package はパッケージから現在の環境に名前をインポートしません。呼び出し側のコードがパッケージ内のアイテムを使用するには、 lookup メソッドでこれらを検索する必要があります。

現在のプロセス (現在のアプレットまたはスクリプト) にパッケージが初めてインポートされる場合は、グローバル変数のすべてのイニシャライザ、および他のトップレベルのコードが実行され、パッケージが初期化されます。たとえば、次のパッケージを見てください。

{curl 8.0 package}
{package MY-PACKAGE, 
    version = "1.0"
}

let public my-array:Array = {Array}
{for i = 0 to 10 do
    {my-array.append i}
}


パッケージが初期化されると、最初にグローバル変数 my-array に新規の Array インスタンスが代入され、次に for ループが実行されて配列に整数を追加します。

プログラミング注意事項

一般的に、パッケージのインポートには import 構文の使用が推奨されていますが、次のような状況では import-package の使用が必要になります。



make-package-selector を使用して、パッケージのインポート用のセレクタを作成することができます。

次のコード例では、import-package を使用して前述の例で宣言されたパッケージを動的にインポートし、そのグローバル変数にアクセスする方法を示しています。

let my-package:Package =
    {import-package
        {make-package-selector
            "MY-PACKAGE",
            version = "1.0",
            location = {url "<somewhere>/my-package.scurl"}
        }
    }

let my-array:Array = {my-package.lookup "my-array"} asa Array