4

我有以下功能:

func fitrange(a, x, b int) int {
    if a > b {
        a, b = b, a
    }
    switch true {
    case x < a:
        return a
    case x > b:
        return b
    default:
        return x
    }
}

go 编译器抱怨“函数在没有返回语句的情况下结束”,即使通过switch语句的每个可能路径都返回一个值。return除了在函数末尾添加一个虚拟语句之外,还有什么方法可以解决这个问题?

4

2 回答 2

10

default外壳全部拆下,并return x在开关后拆下。

像:

func fitrange(a, x, b int) int {
    if a > b {
        a, b = b, a
    }
    switch true {
    case x < a:
        return a
    case x > b:
        return b
    }
    return x
}
于 2012-06-18T20:03:00.533 回答
7

除了在末尾添加 return 之外,您还可以通过添加 panic 来安抚编译器。这不是一个坏主意,因为如果您的代码包含错误并且曾经到达“无法访问”的行,那么您的程序将立即停止,而不是继续使用可能错误的答案。

于 2012-06-18T20:10:20.813 回答