我有这样的代码:创造新类型的去混淆
type ErrNegativeSqrt float64
为什么这样的结构可用?
float64(ErrNegativeSqrt(-2))
哪个'mechanics'用于存储-2在ErrNegativeSqrt
?
我有这样的代码:创造新类型的去混淆
type ErrNegativeSqrt float64
为什么这样的结构可用?
float64(ErrNegativeSqrt(-2))
哪个'mechanics'用于存储-2在ErrNegativeSqrt
?
ErrNegativeSqrt
是type
不是变量。值存储在变量中。
type ErrNegativeSqrt float64
// x is a variable of type ErrNegativeSqrt with an initial value of -2
var x ErrNegativeSqrt = -2
UPDATE:
转到编程语言规范
有布尔常量,符文常量,整型常量 浮点常量,复合常量和字符串常量。 字符,整数,浮点数和复数常量是统称为数值常量的 。
恒定值由符文,整数,浮点表示, 虚数,或字符串文字,标识符表示一个常数, 常量表达式,用结果为常数,或 的一个转换某些内置函数的结果值,如unsafe.Sizeof 应用于任何值,应用于某些表达式的cap或len,real和 将应用于复数常数和复数的imag应用于数字 常量。布尔真值由预定义的 常量true和false表示。预先标识的标识符iota表示一个整数常量 。
数字常数表示任意精度的值,并且不会 溢出。
常量可以是键入的或无类型的。文字常量,真,假,只包含无类型的恒定表达式 常量操作数是无类型的。
一个常量可以通过常量声明或 转换明确给出类型,或者在变量声明或赋值中或在表达式中用作操作数时隐式地赋予常量类型。
换算的形式为T(x),其中T是一个类型,并且x 是可被转换为类型T.
ErrNegativeSqrt(-2)
是转换表达式的表达式。无类型常量-2
转换为ErrNegativeSqrt
类型,因为作为操作数,它可以表示为ErrNegativeSqrt
的float64
基础类型。
ErrNegativeSqrt(-2)是可能的,因为ErrNegativeSqrt是一个内部的float64,由规范描述为能够容纳“IEEE-754 64位浮点数”。
这就是所谓的转换,在这里看到:http://golang.org/ref/spec#Conversions。它描述了如何在兼容时通过将另一个值转换为该类型来创建值。这里-2可以表示为float64。
是的,但为什么'ErrNegativeSqrt(-2)'是可能的? –
看到我的修改答案。 'ErrNegativeSqrt(-2)'是一个转换。 – peterSO