ホームページ >バックエンド開発 >Golang >メソッドのパラメータを関数に渡す

メソッドのパラメータを関数に渡す

王林
王林転載
2024-02-14 08:21:081072ブラウズ

メソッドのパラメータを関数に渡す

PHP 開発では、メソッド パラメーターを関数に渡すことが一般的な要件です。パラメータを関数に渡すことで、関数内でパラメータを操作および処理できるため、より柔軟で再利用可能なコードが実現します。この記事では、PHP エディターの Baicao がメソッド パラメーターを関数に正しく渡す方法を紹介し、開発者がこの重要なプログラミング概念をより深く理解し、適用できるようにするための実践的なヒントと注意事項を共有します。初心者でも経験豊富な開発者でも、この記事は貴重な参考資料とガイダンスを提供します。

質問内容

これがgoで可能なのか知りたいです。複数のメソッドを備えたタイプがあります。メソッドのパラメーターを受け取り、その型に対してそれを呼び出す関数を作成することは可能ですか?

これが私が望むものの小さな例です:

リーリー

go は、渡されたメソッド名で置き換えるのではなく、型 foofoo() という名前のメソッドがあると想定します。

解決策

はい、可能です。選択肢は 2 つあります:

仕様: メソッド式

expressionfoo.a は、a と同等の関数を生成しますが、最初の引数として明示的なレシーバーを持ち、シグネチャ func(f foo ) を持ちます。

リーリー

このメソッドの受信者は明示的です。メソッド名 (およびその型) を bar() に渡すだけで、それを呼び出すときに、実際のレシーバー m(f) を渡す必要があります。

期待どおりの出力 (go playground で試した):

リーリー

仕様: メソッド値

ffoo 型の値の場合、式 f.afunc() 型の関数値を生成します。暗黙的に受信側の値は f です。 リーリー

ここでのメソッド レシーバーは暗黙的であることに注意してください。メソッド レシーバーは

bar() に渡される関数値とともに保存されるため、明示的に指定しなくても呼び出すことができます: m( )

出力は同じです (

go playground で試してください)。

(完全を期すため:

反省)

前のソリューションよりも (パフォーマンスと「セキュリティ」の点で) 低くなりますが、メソッド名を

string 値として渡し、reflect# を使用できます。 ## この名前でメソッドを呼び出すパッケージ。次のようになります: リーリー 遊び場に行って

で試してみましょう。

以上がメソッドのパラメータを関数に渡すの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。