doujia7779 2019-06-06 02:08
浏览 50
已采纳

将Golang定义的类型视为基础类型?

I'm new to Golang. I understand the basics of defining new types like below:

type MyCondition bool

I know this implies that whenever I state a function takes an instance of MyCondition it cannot be a bool, and that's great. However, I would like to treat an instance of MyCondition as if it was a bool, and I've found I can't always do that:

package main

import (
    "fmt"
)

type MyCondition bool

func main() {
    var b1 MyCondition
    var b2 = true
    fmt.Println(!b1) // OK!
    fmt.Println(b1 || b1) // OK
    fmt.Println(b1 || b2)
}

This doesn't compile, throwing:

./prog.go:13:17: invalid operation: b1 || b2 (mismatched types MyCondition and bool)

From what I've observed, MyCondition works as a bool on its own, but the problem occurs when I "mix" it with an actual bool.

Questions are:

  1. Why does this happen?
  2. What's a workaround for this? I'd really like to treat it like a bool without the need of casting, polymorphically.
  • 写回答

3条回答 默认 最新

  • dongzhi9906 2019-06-06 02:28
    关注

    You cannot do that. You have to convert MyCondition to bool explicitly, i.e. bool(b1) || b2.

    From Go spec:

    Logical operators apply to boolean values and yield a result of the same type as the operands.

    If the left operand and the right operand have different types, the compiler can't decide the result type. So these two operands must be of the same type.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?