Mojo入門 (3) - MojoモジュールとMojoパッケージ
以下の記事が面白かったので、かるくまとめました。
前回
1. Mojoモジュール
「Mojoモジュール」は、「Mojoコード」にインポートして利用する「Mojoコード」です。
「Mojoモジュール」の記述例は、次のとおりです。このコードには main() がないため、mymodule.mojo を直接実行することはできません。
・mymodule.mojo
struct MyPair:
var first: Int
var second: Int
fn __init__(inout self, first: Int, second: Int):
self.first = first
self.second = second
fn dump(self):
print(self.first, self.second)
「Mojoモジュール」を使用する「Mojoコード」の記述例は、次のとおりです。
・main.mojo
from mymodule import MyPair
fn main():
let mine = MyPair(2, 4)
mine.dump()
モジュール全体をインポートして、モジュール名を介してアクセスすることもできます。
・main.mojo
import mymodule
fn main():
let mine = mymodule.MyPair(2, 4)
mine.dump()
「as」を使用してインポートされたメンバーの別名を使用することもできます。
・main.mojo
import mymodule as my
fn main():
let mine = my.MyPair(2, 4)
mine.dump()
mymodule.mojo と main.mojo が同じディレクトリにある場合にのみ機能します。現在、「mojoコード」が他のディレクトリに存在する場合、モジュールとしてインポートすることはできません。
2. Mojoパッケージ
「Mojoパッケージ」は、1つのディレクトリでまとめた「Mojoモジュール」群です。全モジュールをまとめ、てまたは個別にインポートできます。「.mojopkg」または「.📦」にコンパイルして共有しやすくすることもできます。
プロジェクトのファイル構成を以下とします。
「main.mojo」は、次のように「MyPair」をインポートできます。「__init__.mojo」がないと、ディレクトリがパッケージとして認識されません。
・main.mojo
from mypackage.mymodule import MyPair
fn main():
let mine = my.MyPair(2, 4)
mine.dump()
パッケージをコンパイルするコマンドは、次のとおりです。パッケージファイル「mypack.mojopkg」が生成されます。
$ mojo package mypackage -o mypack.mojopkg
パッケージファイルのみ (ディレクトリなしに) でパッケージを利用できます。
・main.mojo
from mypack.mymodule import MyPair
3. __init__.mojo
ディレクトリを「Mojoパッケージ」として認識するには、「__init__.mojo」が必要です。空ファイルにすることもできます。
プロジェクトのファイル構成を以下とします。
次の行を「__init__.mojo」に追加します。
・__init__.mojo
from .mymodule import MyPair
これで、main.mojo の importを次のように簡略化できます。
・main.mojo
from mypackage import MyPair
この機能は、Mojo 標準ライブラリの一部のメンバーがパッケージ名からインポートできる一方で、他のメンバーが <package_name>.<module_name> 表記を必要とする理由を説明します。たとえば、関数モジュールはアルゴリズムパッケージ内に存在するため、次のようにそのモジュールのメンバー (map() など) をインポートできます。
from algorithm.functional import map
「algorithm/__init__.mojo」には次の行も含まれています。
・algorithm/__init__.mojo
from .functional import *
from .reduction import *
したがって、パッケージ名を付けるだけで、関数型またはリダクション型のものをインポートできます。 つまり、import ステートメントから関数名を削除することもできます。
from algorithm import map
この記事が気に入ったらサポートをしてみませんか?