Open6

🔥Mojoのstructについて

nowex35nowex35

Struct宣言

構造体structは以下のように宣言を始めます

struct Socket[AddrType: Addr, address_family: Int = AF_INET](Representable,Stringable, Writable):

ここで[]で囲まれている部分は型パラメータの定義で、複数のAddrTypeやAFでインスタンスを作成を可能にします。
また()で囲まれている部分は使用するtraitを指定しており、ここで指定されたtraitに基づいたdunderメソッド(init,del,etc...)を実装する必要があります。

nowex35nowex35

__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__メソッドを書くことができ、それに応じて異なる初期化を行います。

nowex35nowex35

__copyinit__(dunder method)

インスタンスをコピーする際に呼び出されます。

fn __copyinit__(out self, existing: Self):
        self.name = existing.name
        self.age = existing.age

このメソッドを定義しないとインスタンスをコピーすることはできません。

nowex35nowex35

__copyinit__(dunder method)

インスタンスを移動する際に呼び出されます。つまり、所有権を渡し手元のメモリをそのまま使います。

fn __moveinit__(out self, owned existing: Self):
        self.name = existing.name^
        self.age = existing.age

引数では、所有権をもたせた(item^の様にシギルをつける)変数を与える必要があります。

nowex35nowex35

__eq__(dunder method)

__eq__(self: _Self, other: _Self) -> Bool

オブジェクトの二つのインスタンスが互いに等しいかどうかをしらべる

nowex35nowex35

__ne__(dunder method)

__ne__(self: _Self, other: _Self) -> Bool

オブジェクトの二つのインスタンスが互いに異なるかどうかをしらべる