在C/C++ (以及该系列中的许多语言)中,根据条件声明和初始化变量的常见习惯用法是使用三元条件运算符:
int index = val > 0 ? val : -val
Go没有条件运算符。实现上述相同代码的最常用的方式是什么?我得到了以下解决方案,但它似乎相当冗长
var index int
if val > 0 {
index = val
} else {
index = -val
}
有没有更好的东西?
发布于 2013-11-14 22:08:48
正如所指出的(希望并不令人惊讶),使用if+else
确实是在Go中执行条件句的idiomatic way。
但是,除了完整的var+if+else
代码块之外,这种拼写也经常使用:
index := val
if val <= 0 {
index = -val
}
如果你有一个足够重复的代码块,比如int value = a <= b ? a : b
的等价物,你可以创建一个函数来保存它:
func min(a, b int) int {
if a <= b {
return a
}
return b
}
...
value := min(a, b)
编译器将内联这些简单的函数,因此它更快、更清晰、更简短。
发布于 2016-01-06 23:18:49
假设您有以下三元表达式(用C编写):
int a = test ? 1 : 2;
Go中惯用的方法是简单地使用if
块:
var a int
if test {
a = 1
} else {
a = 2
}
但是,这可能不符合您的要求。在我的例子中,我需要一个代码生成模板的内联表达式。
我使用了一个立即求值的匿名函数:
a := func() int { if test { return 1 } else { return 2 } }()
这可以确保两个分支都不会同时被评估。
发布于 2015-07-18 03:57:53
不带括号的map三元很容易阅读:
c := map[bool]int{true: 1, false: 0} [5 > 4]
https://stackoverflow.com/questions/19979178
复制相似问题