package main
import "fmt"
func main() {
//运行结果:a
if true || b() { //go 的 if 判断采用短路求值,值已经确定后续的表达式不会计算也不会被调用
fmt.Println("a")
}
//运行结果:ba
if or(true, b()) { //函数的参数必须被即时求值的
fmt.Println("a")
}
//运行结果:a
if orfunc(true, b) { //传入函数参数的函数实现惰性求值
fmt.Print("a")
}
}
func b() bool {
fmt.Print("b")
return false
}
func or(a, b bool) bool {
return a || b
}
func orfunc(a bool, b func() bool) bool {
return a || b()
}