ゲームエンジンのようなものを作っているとします。
いくつかのイベント ハンドラーを定義するには GameObject 構造が必要です:
リーリー次に、特定のゲーム オブジェクトを初期化するときに、ハンドラーをカスタム関数として定義したいと思います。
リーリーtailMotionSpeed
と boid
は GameObject のメンバーではないことに注意してください。これらは struct FishGameObject
のメンバーであり、いくつかのカスタム プロパティと匿名の GameObject を持ちます:
パラメーターを GameObjectGetter として指定すると、エラー self.tailMotionSpeed unknown (type GameObjectGetter has no field or method tailMotionSpeed)
が発生し、エラー cannot use handler が発生します(type func (variable of self FishGameObject) )) 構造体リテラル
の func(self GameObjectGetter) の値として (パラメーターを FishGameObject として指定した場合)。私は何をしますか?
あなたがやりたいことは、あなたがやりたいようにGoで実現することはできません。ただし、次のようにすることもできます:
GameObject
をインターフェイスとして定義します:
BaseGameObject
:
BaseGameObject
が GameObject
になるようにすべてのメソッドを定義します。
次に、先ほどと同じように FishGameObject
を定義しますが、
すべてのメソッドでポインタ レシーバも使用する必要があります。
以上が構造体内の関数パラメータとしてコンポジットの使用を許可するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。