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条)

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line