我正在學習關于 Golang 的“A Tour of GO”教程和以下代碼:package mainimport ( "fmt" "math")func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } else { fmt.Printf("%g >= %g\n", v, lim) } // can't use v here, though return lim}func main() { fmt.Println( pow(3, 2, 10), pow(3, 3, 20), )}將打印“27 >= 20 9 20”。我很困惑為什么它不是“9 27 >= 20 20”第一次調用 pow(3,2,10) 不應該返回 9,打印它,然后調用 pow(3,3,20) 并打印其余的嗎?
2 回答

繁花如伊
TA貢獻2012條經驗 獲得超12個贊
這實際上有點微妙,讓我困惑了一秒鐘?!懊孛堋笔且粋€函數必須在調用它之前評估它的所有參數。所以它調用函數兩次以獲得 9 和 20,但其中一個評估恰好調用 Println。
為什么語言在調用函數之前評估其參數是相當簡單的(當涉及副作用時,這種部分應用程序很棘手,并且主要保留給函數式語言),但是隱藏具有副作用的函數,例如在函數評估中打印應該可能只是為了清楚起見而氣餒。
代碼可能更直接:
func main() {
arg1,arg2 := pow(3,2,10),pow(3,3,20)
fmt.Println(arg1, arg2)
}

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
fmt.Println() 在調用之前需要它的所有參數。
所以,您有 9,但是當您獲得另一個值 (20) 時,控制臺會打印其他內容。
是否就像這樣:
package main
import "fmt"
func main() {
fmt.Println(9, f())
}
func f() int {
fmt.Println("This gets printed before")
return 20
}
輸出:
This gets printed before
9 20
- 2 回答
- 0 關注
- 238 瀏覽
添加回答
舉報
0/150
提交
取消