2010-04-30 10 views
6

he definir un tipo:Creación de registro de Ada con un campo

type Foo is record 
    bar : Positive; 
end record; 

Quiero crear una función que devuelve una instancia del registro:

function get_foo return Foo is 
    return (1); 
end get_foo; 

Pero Ada no va a dejar yo, diciendo que "el agregado posicional no puede tener un argumento".
Intentando estúpidamente, agregué otro campo mudo al registro, ¡y luego return (1, DOESNT_MATTER); funciona!

¿Cómo le digo que Ada no es un agregado de posición, sino un intento de crear un registro?

+5

FYI: En mi experiencia, la mayoría de los enemigos "Ada" se sienten frustrados porque están tratando de codificar algún otro idioma en Ada. Una vez que aprendes a escribir Ada, es un lenguaje muy bueno. Mejor que la mayoría. Sin embargo, hace un compilador de C increíblemente malo. –

+0

Por ejemplo, * realmente * tiene que pensar en sus tipos. Si hay casos extremos donde intentará poner un 0 en la barra de arriba, va a empezar a sentirse realmente frustrado con constante 'constraint_error'. –

+0

Como alguien que se acercó a Ada de forma optimista, estaba/estoy frustrado porque, a diferencia de otros idiomas, Ada hace que sea frustrantemente difícil aprender la "forma de hacerlo de Ada". :) Me gusta la idea de Ada, pero considero que la implementación es complicada y frustrante. Me identifico con ada hater. : p – weberc2

Respuesta

7

La inicialización de agregado posicional no se puede usar con registros que tienen solo un componente, pero eso no significa que no pueda tener registro con un componente.

Los valores de un tipo de registro se especifican dando una lista de campos mencionados. El código correcto para su función get_foo debería ser el siguiente.

function get_foo return Foo is 
    return (bar => 1); 
end get_foo; 

También puede especificar el tipo de registro usando la expresión Foo'(bar => 1).

Usando la lista de componentes nombrados es mejor en la práctica que initilization posicional. Puede olvidar la posición del componente y no cambia si agrega un nuevo campo en su registro.

+0

¡Gracias! ¡Me hiciste odiar a Ada un poco menos! :) –

+0

Ese es el truco. –

Cuestiones relacionadas