El día 17 de noviembre de 2010 20:06, Milton Galo Patricio Inostroza
Aguilera <[email protected]> escribió:
> El día 17 de noviembre de 2010 14:25, Chema Cortes <[email protected]> 
> escribió:
>> Este modo de ver los tipos me "chirría" mucho. Que los nodos AST
>
> ¿Qué significa "cirría"?

"Chirriar" es la onomatopeya del ruido agudo que hacen los ejes
desencajados de un coche de caballos. Equivaldría a "desafinado".

>> tengan "referencias" a objetos no implica que la "referencia" sea el
>> tipo "estático" existente. Para cada tipo "estándar" hay siempre en
>
> Creo que hay una confusión...yo dije que están "etiquetados", es decir
> se dice que lo que se tiene es una función para que el sistema cuando
> encuentre un número lanze un mensaje acorde con el error y no un
> segmentation fault.  En ninguna momento quize decir que se guarda una
> referencia (instancia de un objeto?) en el AST.

Me falta teoría general sobre ST/AST para poder seguirte. En todo
caso, no siempre los tipos de datos que se usan en los nodos AST
coinciden con los tipos de datos del lenguaje. Un ejemplo:

>>> 1.__int__
  File "<stdin>", line 1
    1.__int__
            ^
SyntaxError: invalid syntax

>>> getattr(1,"__int__")
<method-wrapper '__int__' of int object at 0x981ed68>
>>> hex(id(1))
'0x981ed68'
>>>

En el primer caso, el analizador sintáctico toma a '1' como de tipo
'integer' en lugar de tipo 'object', lo que provoca error "sintáctico"
al acceder a los atributos (BTW, ruby no produce este error).
En el segundo caso se comprueba que el objeto '1' existe, es de tipo
'int' y se accede a sus métodos sin problemas.

En cambio:

>>> 1.0.__int__
<method-wrapper '__int__' of float object at 0x98279a4>
>>> 1.0.__int__
<method-wrapper '__int__' of float object at 0x98279b4>

No da errores sintácticos porque '1.0' es considerado por AST como de
tipo 'object'. (A su vez puede verse que no siempre se accede al mismo
objeto cada vez).
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a