[解決済み】関数はパラメータとして渡すことができますか?
2022-04-08 15:15:47
質問
Javaでは、次のようなことができます。
derp(new Runnable { public void run () { /* run this sometime later */ } })
で、後でメソッド内のコードを実行します。処理するのは面倒ですが(匿名の内部クラス)、できます。
Goには、関数/コールバックをパラメータとして渡すことを容易にするようなものがあるのでしょうか?
どのように解決するのですか?
はい、いくつかの例を考えてみてください。
package main
import "fmt"
// convert types take an int and return a string value.
type convert func(int) string
// value implements convert, returning x as string.
func value(x int) string {
return fmt.Sprintf("%v", x)
}
// quote123 passes 123 to convert func and returns quoted string.
func quote123(fn convert) string {
return fmt.Sprintf("%q", fn(123))
}
func main() {
var result string
result = value(123)
fmt.Println(result)
// Output: 123
result = quote123(value)
fmt.Println(result)
// Output: "123"
result = quote123(func(x int) string { return fmt.Sprintf("%b", x) })
fmt.Println(result)
// Output: "1111011"
foo := func(x int) string { return "foo" }
result = quote123(foo)
fmt.Println(result)
// Output: "foo"
_ = convert(foo) // confirm foo satisfies convert at runtime
// fails due to argument type
// _ = convert(func(x float64) string { return "" })
}
再生する http://play.golang.org/p/XNMtrDUDS0
ツアー https://tour.golang.org/moretypes/25 (ファンクションクロージャー)
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MIPSの関数(プロシージャ)について
-
[解決済み] Linuxにおけるoutb()関数呼び出しとは?
-
[解決済み] D3キー機能
-
[解決済み] Haskellでfilter関数を使うにはどうしたらいいですか?
-
[解決済み] Swiftのクラスにおける静的関数/変数とクラス関数/変数?
-
[解決済み】コールバックをわかりやすく説明するには?ある関数から別の関数を呼び出すのとはどう違うのですか?
-
[解決済み】関数定義にジャンプする
-
[解決済み】「関数」と「プロシージャ」の違いは何ですか?
-
[解決済み】関数はパラメータとして渡すことができますか?
-
[解決済み] 関数が長すぎる場合とは?[クローズド]