Ver Mensaje Individual
  #6  
Antiguo 06-06-2003
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 22
gatosoft Va camino a la fama
Wink

Bueno, si trtamos de analizar paso a paso el trabajo del compilador yo diria, sobre esta linea de codigo:


t:=TTabla.Create.AddTitulos([TLinea.Create('t')]).AddLinea([TLinea.Create('ll')])


Primero resuelve los parentesis:

TLinea.Create('t') y TLinea.Create('ll')

Luego, para resolver esta linea, daria prioridad al constructor:

TTabla.Create.AddTitulos(...).AddLinea(...)

pero una vez resuelto eso, el tendria que resolver, si solucionar primero el AddTitulos o el AddLinea:

¿Como sabria el cual tiene prioridad?

Resolver de Izquierda a derecha o de derecha a Izquierda en caso de empate.....

tal vez lo mas obvio , en teoria de objetos (o al menos para mi), seria que resolviera de Derecha a Izquierda....


Objeto.funcion1.funcion2.funcion3
=============>>

Pues el obejto es el que envia los mensajes y es de donde nacen las propedades y los metodos.... En este caso el compilador no tendria problemas... no deberia marcar error en tu codigo

Pero y si intenta resolver la situación en la otra dirección?:

Objeto.funcion1.funcion2.funcion3
<<============

No se por que habria de hacerlo asi.... pero tal parece que asi esta funcionando, o si no...¿de que otra manera podria decir que el objeto no ha sido creado? (creo haber entendido que ese es el error).


Como dices... este ejemplo es mas instructivo que aplicativo.... pues el problema se resuelve partiendo en dos lines tu codigo,pero nos puede ayudar a enteder de alguna forma como trabaja el compilador en estos casos...


suerte.
Responder Con Cita