From: Duke Normandin <dukeofperl@ml1.net>
Subject: Re: Noob question: universal_integer type
Date: Sat, 22 May 2010 13:04:03 GMT
Date: 2010-05-22T13:04:03+00:00 [thread overview]
Message-ID: <7DQJn.4466$Z6.1110@edtnps82> (raw)
In-Reply-To: 85pemlFod9U1@mid.individual.net
On 2010-05-22, Niklas Holsti <niklas.holsti@tidorum.invalid> wrote:
> Jeffrey R. Carter wrote:
>> Duke Normandin wrote:
>>>
>>> Let me get this right... if I use an undeclared integer in an expression,
>>> Ada will "deem it" to be a "universal_integer" and not choke at
>>> compile-time?
>>
>> I don't know, and I've been using Ada since 1984. What is "an undeclared
>> integer"?
>>
>> 17 is an integer literal; all integer literals are universal_integer. 17
>> is not an undeclared integer.
>>
>> What the tutorial is trying to get across is that Ada, unlike some
>> languages, does not have typed numeric literals (see also
>> universal_real). You might encounter a language in which 10 is a literal
>> of type int and 10L a literal of long int, for example. In Ada, all
>> integer literals are universal_integer, and implicitly converted to
>> specific integer types as required.
>>
>> Partly this makes life easier: you can change the type of a variable and
>> not have to change all the literals used with that variable; and partly
>> it's pretty much needed in a language that lets you define your own
>> numeric types.
>
> Perhaps it is also worth mentioning that Ada does have a way of
> explicitly indicating the type to be chosen for a literal, by
> "qualifying" it with a type name. This can be necessary to resolve
> overloaded operation names. For example, assume that you define two
> integer types:
>
> type Apples is range 0 .. 20;
> type Ants is range 0 .. 1_000_000;
>
> and then define a procedure "Eat" for each type, with different content
> for eating apples and for eating ants:
>
> procedure Eat (Items : Apples) ... end Eat;
>
> procedure Eat (Items : Ants) ... end Eat;
>
> A call of Eat with a literal parameter, for example Eat (17), is then
> ambiguous (and the compiler will tell you so). To show if you are eating
> apples or ants, you qualify the literal with the type name and an
> apostrophe, as in
>
> Eat (Apples'(17));
>
> for eating 17 apples, or
>
> Eat (Ants'(17))
>
> for eating 17 ants. Since the type of the parameter is now explicit, the
> compiler knows which procedure Eat is to be called.
>
I love it! and the compiler would choke with an "out of bounds" exception if
you called Eat (Apples'(25)); - if I understand the Coronado tutorial
correctly. Thanks for the input...
--
Duke Normandin
*** Tolerance becomes a crime, when applied to evil [Thomas Mann] ***
next prev parent reply other threads:[~2010-05-22 13:04 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-21 23:15 Noob question: universal_integer type Duke Normandin
2010-05-21 23:33 ` Yannick Duchêne (Hibou57)
2010-05-21 23:34 ` Yannick Duchêne (Hibou57)
2010-05-21 23:37 ` Jeffrey R. Carter
2010-05-22 2:04 ` Duke Normandin
2010-05-22 7:16 ` Niklas Holsti
2010-05-22 13:04 ` Duke Normandin [this message]
2010-05-22 13:47 ` Dmitry A. Kazakov
2010-05-22 14:51 ` Duke Normandin
2010-05-22 20:08 ` Yannick Duchêne (Hibou57)
2010-05-23 2:28 ` Duke Normandin
2010-05-23 2:36 ` Yannick Duchêne (Hibou57)
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox