Discussion:
Renommage d'attributs.
(trop ancien pour répondre)
Blady
2015-05-22 15:25:52 UTC
Permalink
Bonjour,

comme l'exemple du RM le suggère au §8.5.4, il est possible de renommer
un attribut :
function Next(X : Color) return Color renames Color'Succ; -- see 3.5.1

Mais qu'en est de l'attribut Length:

function L (S:String) return Integer renames String'Length;

GNAT n'est pas d'accord:

31:41: expected an integer type
31:41: found type "Standard.String"
31:41: expression for dimension must be static
31:41: "S" is not static constant or named number (RM 4.9(5))
31:49: prefix for "Length" attribute must be constrained array

Que faudrait-il écrire ?

Merci, Pascal.
http://blady.pagesperso-orange.fr
J-P. Rosen
2015-05-22 15:54:41 UTC
Permalink
Post by Blady
Bonjour,
comme l'exemple du RM le suggère au §8.5.4, il est possible de renommer
En fait, pas vraiment. Un attribut n'a rien de spécial, c'est juste un
élément du langage automatiquement fourni par le compilateur. Il obéit
aux mêmes règles que les éléments définis par l'utilisateur.
Post by Blady
function Next(X : Color) return Color renames Color'Succ; -- see 3.5.1
function L (S:String) return Integer renames String'Length;
S'Length est une constante, pas une fonction. Donc, on ne peut le
surnommer en tant que fonction. Tu peux l'utiliser comme valeur initiale
d'une constante ou d'un nombre nommé:
S : String (1..10);
X : constant := S'length;

(String'Length n'est pas autorisé parceque String n'est pas contraint)
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
Blady
2015-05-24 08:02:00 UTC
Permalink
Ah, effectivement, c'est une différence de taille.
Il faut alors comprendre dans le RM que si un attribut n'est
explicitement décrit comme une fonction "S'Succ denotes a function with
the following specification:" alors il s'agit d'une constante.

Merci pour la précision, Pascal.
Post by J-P. Rosen
Post by Blady
Bonjour,
comme l'exemple du RM le suggère au §8.5.4, il est possible de renommer
En fait, pas vraiment. Un attribut n'a rien de spécial, c'est juste un
élément du langage automatiquement fourni par le compilateur. Il obéit
aux mêmes règles que les éléments définis par l'utilisateur.
Post by Blady
function Next(X : Color) return Color renames Color'Succ; -- see 3.5.1
function L (S:String) return Integer renames String'Length;
S'Length est une constante, pas une fonction. Donc, on ne peut le
surnommer en tant que fonction. Tu peux l'utiliser comme valeur initiale
S : String (1..10);
X : constant := S'length;
(String'Length n'est pas autorisé parceque String n'est pas contraint)
Loading...