1 | ////////////////////////////////////////////////////////////////////////////// |
---|
2 | // Uso de las clases como una gramática. |
---|
3 | |
---|
4 | Class CPrueba { |
---|
5 | Real _.valor; |
---|
6 | Real GetValor(Real unused) { Copy(_.valor) }; |
---|
7 | Real SetValor(Real val) { Real _.valor := val } |
---|
8 | }; |
---|
9 | |
---|
10 | ////////////////////////////////////////////////////////////////////////////// |
---|
11 | // [1]: |
---|
12 | /* |
---|
13 | CPrueba CPrueba.New(Real val) { |
---|
14 | CPrueba [[ Real _.valor = val ]] |
---|
15 | }; |
---|
16 | |
---|
17 | CPrueba CPrueba.New(0); |
---|
18 | */ |
---|
19 | // ERROR: La expresión no devuelve una instancia de Class CPrueba: |
---|
20 | // {CPrueba SetOfAnything[[Real _.valor=val]]} |
---|
21 | // Recuerde que las declaraciones de instancias deben seguir la sintaxis: |
---|
22 | // Class <instance_name> = [[ ... ]]; |
---|
23 | // |
---|
24 | // No veo la necesidad de que la instancia tenga que tener un nombre. |
---|
25 | |
---|
26 | ////////////////////////////////////////////////////////////////////////////// |
---|
27 | // [2]: |
---|
28 | /* |
---|
29 | CPrueba CPrueba.New(Real val) { |
---|
30 | CPrueba [[ Real _.valor = val ]] |
---|
31 | }; |
---|
32 | |
---|
33 | CPrueba a = CPrueba.New(0); |
---|
34 | */ |
---|
35 | // OK |
---|
36 | |
---|
37 | ////////////////////////////////////////////////////////////////////////////// |
---|
38 | // [3]: |
---|
39 | /* |
---|
40 | CPrueba CPrueba.New(Real val) { |
---|
41 | CPrueba newPrueba = [[ Real _.valor = val ]] |
---|
42 | }; |
---|
43 | |
---|
44 | Text ""; |
---|
45 | CPrueba CPrueba.New(0); |
---|
46 | */ |
---|
47 | // ERROR: No ha sido posible convertir de NameBlock hacia Text para el objeto 'newPrueba' |
---|
48 | // Este error se debe a que no se reconoce CPrueba como un equivalente a NameBlock |
---|
49 | // y se asume la gramática de la línea anterior. |
---|
50 | |
---|
51 | // Tras un error como éste, si se decompila y compila, |
---|
52 | // se obtienen errores del tipo: |
---|
53 | // ERROR: Class 'CPrueba' ya fue definida como "" |
---|
54 | // Parece que algo queda sin destruir por ahí. |
---|
55 | |
---|
56 | // Sin embargo, funciona si probamos algo como esto: |
---|
57 | /* |
---|
58 | CPrueba CPrueba.New(Real val) { |
---|
59 | CPrueba newPrueba = [[ Real _.valor = val ]] |
---|
60 | }; |
---|
61 | |
---|
62 | NameBlock CPrueba CPrueba.New(0); |
---|
63 | */ |
---|
64 | ////////////////////////////////////////////////////////////////////////////// |
---|
65 | |
---|