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()
}
posted on 2018-09-05 15:15  scala  阅读(653)  评论(0编辑  收藏  举报