close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #780: ticket_14.HomonymMethods.tol

File ticket_14.HomonymMethods.tol, 1019 bytes (added by pgea@…, 15 years ago)
Line 
1
2Class @ClaseA {
3
4  Real valor;
5
6  Real GetValor(Real void) { valor };
7  Text Dime(Real void) { "ClaseA" };
8
9  @ClaseA Copy(Real void) {
10    @ClaseA new = [[
11      Real valor = GetValor(?)
12    ]];
13    //! Se accede al método homónimo de la clase B
14    //! cuando una instancia de B me llama... (véase el ejemplo)
15    WriteLn(Dime(?));  // --> "ClaseB"
16    //! Sin embargo así no...
17    WriteLn(""<<Dime(?)); // --> "ClaseA"
18    //! o asi tampoco:
19    WriteLn(_this::Dime(?)); // --> "ClaseA"
20    //! ¿Qué ocurre?
21    new
22  }; 
23
24  Static @ClaseA New(Real uValor) {
25    @ClaseA new = [[
26      Real valor = uValor
27    ]];
28    new
29  }
30
31};
32
33Class @ClaseB {
34
35  @ClaseA objetoA;
36
37  Text Dime(Real void) { "ClaseB" };
38 
39  Static @ClaseB New (NameBlock args) {
40    @ClaseB new = [[
41      @ClaseA objetoA = args::objetoA::Copy(?)
42    ]];
43    new
44  }
45
46};
47
48// Ejemplo:
49
50@ClaseA miObjetoA = @ClaseA::New(2);
51@ClaseB miObjetoB = @ClaseB::New([[ @ClaseA objetoA = miObjetoA ]]);