Open6
🔥Mojoのstructについて
Struct宣言
構造体structは以下のように宣言を始めます
struct Socket[AddrType: Addr, address_family: Int = AF_INET](Representable,Stringable, Writable):
ここで[]で囲まれている部分は型パラメータの定義で、複数のAddrTypeやAFでインスタンスを作成を可能にします。
また()で囲まれている部分は使用するtraitを指定しており、ここで指定されたtraitに基づいたdunderメソッド(init,del,etc...)を実装する必要があります。
__init__(dunder method)
インスタンスを作成する際に呼び出されるinitialize methodです
fn __init__(out self):
self.name = "taro"
self.age = 15
fn __init__(out self, owned name: String, age: Int):
self.name = name^
self.age = age
引数の異なる複数の__init__メソッドを書くことができ、それに応じて異なる初期化を行います。
__copyinit__(dunder method)
インスタンスをコピーする際に呼び出されます。
fn __copyinit__(out self, existing: Self):
self.name = existing.name
self.age = existing.age
このメソッドを定義しないとインスタンスをコピーすることはできません。
__copyinit__(dunder method)
インスタンスを移動する際に呼び出されます。つまり、所有権を渡し手元のメモリをそのまま使います。
fn __moveinit__(out self, owned existing: Self):
self.name = existing.name^
self.age = existing.age
引数では、所有権をもたせた(item^の様にシギルをつける)変数を与える必要があります。
__eq__(dunder method)
__eq__(self: _Self, other: _Self) -> Bool
オブジェクトの二つのインスタンスが互いに等しいかどうかをしらべる
__ne__(dunder method)
__ne__(self: _Self, other: _Self) -> Bool
オブジェクトの二つのインスタンスが互いに異なるかどうかをしらべる