golang真正的三元表达式(泛型实现)

我们知道三元运算符可以做到惰性计算,而函数做不到,golang没有三元运算相关语法,那么我们造一下轮子。


package main
 
type TernaryExpression[T any] struct {
    b bool
}
 
func (t TernaryExpression[T]) Then(r T) TernaryExpression[T] {
    if t.b {
        panic(r)
    }
    return t
}
func (t TernaryExpression[T]) Else(r T) T {
    return r
}
func TE[T any](f func() T) (r T) {
    defer func() {
        if e := recover(); e != nil {
            r = e.(T)
        }
    }()
    r = f()
    return
}
func If[T any](b bool) TernaryExpression[T] {
    return TernaryExpression[T]{b: b}
}
 
func main() {
    x := TE(func() float64 {return If[float64](3>2).Then(3).Else(2)})
    fmt.Println("r", x)
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容