У меня есть такой код:Создания новые типов в ходе путаницы
type ErrNegativeSqrt float64
Почему такая конструкция доступна?
float64(ErrNegativeSqrt(-2))
Какой 'механика' используется для хранения -2 в ErrNegativeSqrt
?
У меня есть такой код:Создания новые типов в ходе путаницы
type ErrNegativeSqrt float64
Почему такая конструкция доступна?
float64(ErrNegativeSqrt(-2))
Какой 'механика' используется для хранения -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:
The Go Programming Language Specification
Есть логические константы, руна константы, целые константы, Константы с плавающей точкой, комплексные постоянные, и Строковые константы. Символы, целочисленные, с плавающей запятой и комплексные константы - это , коллективно называемые числовыми константами.
Значение константы представлено руна, целое число с плавающей точкой, мнимых или строка символов, идентификатор обозначающего константой, а постоянного выражения, преобразование с результатом, который является постоянным, или в значение результата некоторых встроенных функций, таких как unsafe.Sizeof применяется к любому значению, кепке или len, примененному к некоторым выражениям, real и imag применяется к комплексной константе и сложению, применяемой к числовым константам. Булевские значения истинности представлены предопределенными константами true и false. Обозначенный идентификатор iota обозначает целочисленную константу .
Числовые константы представляют значения произвольной точности и не переполняют .
Константы могут быть напечатаны или неттипны. Литеральные константы, истинные, ложные, iota и некоторые константные выражения, содержащие только нетипизированные константные операнды, являются нетипизированными.
Постоянной может быть задан тип явно декларацией константы или преобразование или неявно при использовании в объявлении переменной или присвоении или в качестве операнда в выражении.
преобразования выражения вида Т (х), где Т представляет собой тип и х это выражение, которое может быть преобразовано в тип Т.
ErrNegativeSqrt(-2)
является преобразование. Нетипированная константа -2
преобразуется в тип ErrNegativeSqrt
, поскольку в качестве операнда она может быть представлена в ErrNegativeSqrt
float64
базовом типе.
ErrNegativeSqrt (-2) возможно, потому что ErrNegativeSqrt является внутренним элементом float64, который описывается спецификацией как способный удерживать «64-разрядные числа с плавающей запятой IEEE-754».
Это называется преобразование, смотрите здесь: http://golang.org/ref/spec#Conversions. В нем описывается, как значение может быть создано путем преобразования другого значения в этот тип, когда оно совместимо. И здесь -2 можно представить как float64.
Да, но почему «ErrNegativeSqrt (-2)» возможен? –
См. Мой пересмотренный ответ. 'ErrNegativeSqrt (-2)' является преобразованием. – peterSO