第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go中的一流函數

Go中的一流函數

Go
心有法竹 2021-04-06 17:15:57
我來自具有一流功能支持的JavaScript。例如,您可以:將一個函數作為參數傳遞給另一個函數從函數返回一個函數。有人可以給我一個例子,說明我將如何在Go中執(zhí)行此操作嗎?
查看完整描述

3 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

package main


import (

    "fmt"

)


type Lx func(int) int


func cmb(f, g Lx) Lx {

    return func(x int) int {

        return g(f(x))

    }

}


func inc(x int) int {

    return x + 1

}


func sum(x int) int {

    result := 0


    for i := 0; i < x; i++ {

        result += i

    }


    return result

}


func main() {

    n := 666


    fmt.Println(cmb(inc, sum)(n))

    fmt.Println(n * (n + 1) / 2)

}

輸出:


222111

222111


查看完整回答
反對 回復 2021-04-26
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

規(guī)范中的相關部分:函數類型。


這里的所有其他答案都首先聲明一個新類型,這種類型很好(實踐),并使您的代碼更易于閱讀,但知道這不是必需的。


您可以使用函數值而無需為它們聲明新的類型,如下面的示例所示。


聲明一個函數類型的變量,該變量具有2個類型的參數,float64并且具有一個類型的返回值,float64如下所示:


// Create a var of the mentioned function type:

var f func(float64, float64) float64

讓我們編寫一個返回加法器函數的函數。此加法器函數應采用2個類型的參數,float64并在調用時應返回這2個數字的和:


func CreateAdder() func(float64, float64) float64 {

    return func(x, y float64) float64 {

        return x + y

    }

}

讓我們編寫一個具有3個參數的函數,前2個是type float64,第3個是函數值,該函數需要2個type的輸入參數float64并產生type的值float64。然后,我們正在編寫的函數將調用傳遞給它的函數值作為參數,并使用前兩個float64值作為函數值的參數,并返回傳遞的函數值返回的結果:


func Execute(a, b float64, op func(float64, float64) float64) float64 {

    return op(a, b)

}

讓我們來看一下前面的示例:


var adder func(float64, float64) float64 = CreateAdder()

result := Execute(1.5, 2.5, adder)

fmt.Println(result) // Prints 4

請注意,當然也可以使用短變量聲明創(chuàng)建時adder:


adder := CreateAdder() // adder is of type: func(float64, float64) float64

在Go Playground上嘗試這些示例。


使用現有功能

當然,如果您已經在具有相同函數類型的包中聲明了一個函數,則也可以使用該函數。


例如,math.Mod()具有相同的功能類型:


func Mod(x, y float64) float64

因此,您可以將此值傳遞給我們的Execute()函數:


fmt.Println(Execute(12, 10, math.Mod)) // Prints 2

打印,2因為12 mod 10 = 2。請注意,現有功能的名稱充當功能值。


在Go Playground上嘗試一下。


筆記:


請注意,參數名稱不是該類型的一部分,具有相同參數和結果類型的2個函數的類型相同,而與參數名稱無關。但是要知道,在參數或結果列表中,名稱必須全部存在或不存在。


因此,例如,您還可以編寫:


func CreateAdder() func(P float64, Q float64) float64 {

    return func(x, y float64) float64 {

        return x + y

    }

}

或者:


var adder func(x1, x2 float64) float64 = CreateAdder()


查看完整回答
反對 回復 2021-04-26
  • 3 回答
  • 0 關注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號