是否可以区分false
和未设置的布尔值?检查布尔值是否设置为Go
举例来说,如果我有这个代码
type Test struct {
Set bool
Unset bool
}
test := Test{ Set: false }
有test.Set
和test.Unset
之间,如果这样我怎么能告诉他们分开有什么区别?
是否可以区分false
和未设置的布尔值?检查布尔值是否设置为Go
举例来说,如果我有这个代码
type Test struct {
Set bool
Unset bool
}
test := Test{ Set: false }
有test.Set
和test.Unset
之间,如果这样我怎么能告诉他们分开有什么区别?
不,一个布尔有两种可能性:true
或false
。未初始化的bool的默认值是false
。如果您想要第三个状态,则可以使用*bool
,而默认值为nil
。
type Test struct {
Set *bool
Unset *bool
}
f := false
test := Test{ Set: &f }
fmt.Println(*test.Set) // false
fmt.Println(test.Unset) // nil
这个成本,这是一个有点丑陋将值设置为文本,你必须更加小心取消引用位(检查无)当您使用的值。
谢谢,我担心没有什么区别,但希望我可以在没有太多痛苦的情况下使用指针解决方案。 – hobberwickey
你可能会认为使用三态布尔值:https://github.com/grignaak/tribool
只是出于好奇:语言规范的哪一部分或围棋之旅让你觉得有东西在往哪个是“未设置”? – Volker
@Volker:出于好奇:有什么不礼貌的地方?如果读者已经阅读完整的语言规范,不要暗示人们只能在这里提问。这不是SOF的工作原理。 –