Verse の モジュール は、再配布して利用でき、依存関係 を壊さなくても経時的に進化するコードのアトミック ユニットです。Verse ファイルにモジュールをインポートすることにより、他の Verse ファイルのコード 定義 を使用できます。
Verse のモジュールは、プロジェクトのファイル階層の フォルダ によって指定され、モジュールの名前がフォルダの名前になります。.verse
ファイルはすべて Verse モジュールの一部であり、モジュールを明示的にインポートしなくてもモジュール内の他の Verse ファイルから定義にアクセスできます。
モジュールは、「/Verse.org/Verse
」などの パス で識別されます。Verse のパスは、対象を識別するためのグローバル名前空間を提供し、Web ドメインからアイデアを借ります。これらのパスは永続的で一意なものであり、Verse のすべてのプログラマーが検出できます。
既存の Verse モジュールのリストは、Verse API リファレンス を参照してください。
モジュール メンバー
次の構文を使用して .verse ファイル内にモジュールを作成できます。
module1 := module:
...
# クラスや関数と同じように、括弧構文もサポートされます。
module2 := module
{
...
}
Verse ファイルで定義されるモジュールには、.verse
ファイルのトップ レベルに含まれるあらゆるものを含めることができます。これには、関数の定義、定数の定義、さまざまな 型 の定義、他のモジュールの定義などがあります。たとえば、次のようになります。
module := module:
submodule<public> := module:
submodule_class<public> := class {}
module_class<public> := class{}
サブモジュールのコンテンツは、ベース モジュールの名前で修飾されたモジュール名を使用して参照できます。たとえば class1
は、module1.module2.class1
として module1
の外部で参照できます。
他の Verse ファイルから定義をインポートする
Verse モジュールのコンテンツを使用するには、パスによってモジュールをインポートする必要があります。たとえば次のコードでは、パス「/Verse.org/Random
」で識別された Random モジュールがインポートされます。
using { /Verse.org/Random }
Verse ファイルに Random モジュールがインポートされると、関数 GetRandomInt()
などのコード定義を使用できます。
他の共通するモジュールの例としては、Devices
、Simulation
、および Diagnostics
モジュールなどがありますが、これらはすべて UEFN から Verse ファイルを作成するとデフォルトでインポートされます。
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
他の Verse ファイルからモジュールをインポートするには、using { /YourVerseFolder/your_module }
などのローカル パスを使用するか、ファイルが同じディレクトリにある場合は単に using { your_module }
を使用します。
ネスティングされているモジュールは、サブモジュールよりも前にベース モジュールをインポートするか、またはドットによる表記を使用することでインポートできます。たとえば、以下のモジュールがあったとします。
base_module<public> := module:
submodule<public> := module:
submodule_class := class:
...
submodule
のメンバーにアクセスする場合は、submodule
よりも前に base_module
をインポートするか、または base_module.submodule
をインポートします。なお、base_module
よりも前に submodule
をインポートすると、エラーが発生します。
# 正しく機能し、ベースとサブモジュールの両方がインポートされます
using { base_module }
using { submodule }
# 正しく機能し、サブモジュールのみがインポートされます
using { base_module.submodule }
# 機能しません
using { submodule }
using { base_module }
Verse プロジェクト内でサブフォルダを作成すると、そのフォルダに対してモジュールが自動的に作成されます。たとえば、base_module
がフォルダ「module_folder
」で定義された場合は、module_folder
に base_module
を含む独自のモジュールが存在しているはずです。
これを確認する別の方法は、ファイル構造 module_folder/base_module
が次と同じになっているのを確認することです。
module_folder := module:
base_module := module:
submodule := module:
submodule_class := class:
...
module_folder
のモジュールは、base_module
よりも前にインポートされる必要があります。
# base_module およびそのサブモジュールを含むフォルダをインポートします
using { module_folder }
using { base_module }
using { submodule }
モジュール内の定義のアクセス
他の Verse ファイルからのモジュールとそのコンテンツのアクセスは、public
や internal
などの アクセス指定子 を使用して設定されます。
デフォルトでは、定義のアクセスは internal
になっており、そのモジュール内でしか検出できません。これは、プロジェクト内のフォルダによって導入されたモジュールについても同様です。
デフォルトのアクセス指定子は internal
であるため、モジュール メンバーを公開しないかぎり、モジュール外でモジュール メンバーにアクセスすることはできません。たとえば、以下の例があります。
# 以下のモジュールと、そのメンバーは他の Verse ファイルからアクセスできません。
private_module := module:
SecretInt:int = 1
...
# しかし、以下のモジュール、そのサブモジュール、およびそのメンバーはアクセスできます。
public_module<public> := module:
public_submodule<public> := module:
PublicInt<public>:int = 1
...
モジュールとそのメンバーの両方が異なるスコープにアクセスするには、public
である必要があります。