I have a question regarding hexadecimal floating-point literals. According to the Lexical Structure (Lexical Structure — The Swift Programming Language (Swift 5.7))
it is not possible to have a hex floating-point literal without the exponent. At first I thought this makes sense.
How else would the lexer / parser know if 0x123.beef is a hex floating-point literal or a hex integer literal with a property 'beef'?
However, if I define such a property on Int, it doesn’t work:
extension Int {
var beef: Int {
return 42
}
}
print(12.beef) // works
print(0b1001.beef) // works
print(0o77.beef) // works
print(0xabc.beef) // error: hexadecimal floating point literal must end with an exponent
Is this just to avoid confusion for the programmer? Or is there some other reason?
I think it avoids the confusion. You can use print((0xabc).beef) instead.
Zhaoxin
···
On Sun, Jun 26, 2016 at 3:50 PM, Toni Suter via swift-users < swift-users@swift.org> wrote:
Hi,
I have a question regarding hexadecimal floating-point literals. According
to the Lexical Structure ( The Swift Programming Language: Redirect
)
it is not possible to have a hex floating-point literal without the
exponent. At first I thought this makes sense.
How else would the lexer / parser know if 0x123.beef is a hex
floating-point literal or a hex integer literal with a property 'beef'?
However, if I define such a property on Int, it doesn’t work:
extension Int {
var beef: Int {
return 42
}
}
print(12.beef) // works
print(0b1001.beef) // works
print(0o77.beef) // works
print(0xabc.beef) // error: hexadecimal floating point literal must end
with an exponent
Is this just to avoid confusion for the programmer? Or is there some other
reason?
On Jun 26, 2016, at 12:50 AM, Toni Suter via swift-users <swift-users@swift.org> wrote:
Hi,
I have a question regarding hexadecimal floating-point literals. According to the Lexical Structure (The Swift Programming Language: Redirect)
it is not possible to have a hex floating-point literal without the exponent. At first I thought this makes sense.
How else would the lexer / parser know if 0x123.beef is a hex floating-point literal or a hex integer literal with a property 'beef'?
However, if I define such a property on Int, it doesn’t work:
extension Int {
var beef: Int {
return 42
}
}
print(12.beef) // works
print(0b1001.beef) // works
print(0o77.beef) // works
print(0xabc.beef) // error: hexadecimal floating point literal must end with an exponent
Is this just to avoid confusion for the programmer? Or is there some other reason?
On 26 Jun 2016, at 11:49, zh ao <owenzx@gmail.com> wrote:
I think it avoids the confusion. You can use print((0xabc).beef) instead.
Zhaoxin
On Sun, Jun 26, 2016 at 3:50 PM, Toni Suter via swift-users <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
Hi,
I have a question regarding hexadecimal floating-point literals. According to the Lexical Structure (The Swift Programming Language: Redirect)
it is not possible to have a hex floating-point literal without the exponent. At first I thought this makes sense.
How else would the lexer / parser know if 0x123.beef is a hex floating-point literal or a hex integer literal with a property 'beef'?
However, if I define such a property on Int, it doesn’t work:
extension Int {
var beef: Int {
return 42
}
}
print(12.beef) // works
print(0b1001.beef) // works
print(0o77.beef) // works
print(0xabc.beef) // error: hexadecimal floating point literal must end with an exponent
Is this just to avoid confusion for the programmer? Or is there some other reason?