De qué forma se definen los métodos en Pharo?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

De qué forma se definen los métodos en Pharo?

javiergelatti
Hola a todos!

Cuando me encontré por primera vez con smalltalk, me resultó buenísima la idea de que las clases se definan enviando un mensaje a la superclase, y me surgió la duda (todavía sin resolver) sobre qué pasa cuando acepto el código de un método en el browser. ¿Se termina enviando algún mensaje "parecido" al que sirve para definir una clase? Me imaginaba algo así como:
ClassName defineMethod: #message:selector: as: [ :arg1 :arg2 |
   
...
]

Saludos!

--
--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a [hidden email].
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: De qué forma se definen los métodos en Pharo?

BrunoBB
Hola,

Los metodos son:
Behavior>>compile:
Class>>compile:categories:
....

Busca por que hay mas metodos para compilar codigo en la jerarquia de clases de Behavior.

MyClass compile: 'testMethod
    ^nil'.

saludos,
bruno

El 31/01/2016 a las 22:59, Facundo Javier Gelatti escibió:
Hola a todos!

Cuando me encontré por primera vez con smalltalk, me resultó buenísima la idea de que las clases se definan enviando un mensaje a la superclase, y me surgió la duda (todavía sin resolver) sobre qué pasa cuando acepto el código de un método en el browser. ¿Se termina enviando algún mensaje "parecido" al que sirve para definir una clase? Me imaginaba algo así como:
ClassName defineMethod: #message:selector: as: [ :arg1 :arg2 |
   
...
]

Saludos!
--
--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a [hidden email].
Para acceder a más opciones, visita https://groups.google.com/d/optout.




Avast logo

El software de antivirus Avast ha analizado este correo electrónico en busca de virus.
www.avast.com


--
--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a [hidden email].
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: De qué forma se definen los métodos en Pharo?

Guillermo Schwarz
ok, pero esa es la implementación interna. Podría ser otra. En la
práctica es el compilador el que se encarga de crear los métodos (lo
que es lógico si piensas que los métodos están siempre compilados a
bytecode)... cuando editas un método en realidad lo que ocurre es que
el objeto "method" tiene un puntero a donde se encuentra el fuente del
método dentro de un archivo de log. Al hacer "save", en realidad lo
que hace el compilador es crear un nuevo método, descarta el antiguo
(nadie apunta a él => garbage collection), el nuevo fuente se guarda
en el log, y el nuevo método apunta en el log al punto donde está
guardado el fuente.

Es ingenioso y al mismo tiempo muy eficiente, pero sigue siendo la
implementación. Eso confunde a los newbies, IMHO.

Si eres newbie... en la práctica lo que tienes que hacer para definir
un nuevo método en una clase es ir al systemBrowser o al class browser
y hacer click derecho sobre la clase y "new method".

Un hack es tomar un método que ya existe, editarlo cambiándole el
nombre, y el entorno se encarga de crear un nuevo método. No es muy
intuitivo para los primerizos, pero funciona.

On 2/1/16, Smalltalk <[hidden email]> wrote:

> Hola,
>
> Los metodos son:
> Behavior>>compile:
> Class>>compile:categories:
> ....
>
> Busca por que hay mas metodos para compilar codigo en la jerarquia de
> clases de Behavior.
>
> MyClass compile: 'testMethod
>      ^nil'.
>
> saludos,
> bruno
>
> El 31/01/2016 a las 22:59, Facundo Javier Gelatti escibió:
>> Hola a todos!
>>
>> Cuando me encontré por primera vez con smalltalk, me resultó buenísima
>> la idea de que las clases se definan enviando un mensaje a la
>> superclase, y me surgió la duda (todavía sin resolver) sobre qué pasa
>> cuando acepto el código de un método en el browser. ¿Se termina
>> enviando algún mensaje "parecido" al que sirve para definir una clase?
>> Me imaginaba algo así como:
>>
>>     |
>>     ClassNamedefineMethod:#message:selector: as: [ :arg1 :arg2 |
>>     ...
>>     ]
>>     |
>>
>> Saludos!
>> --
>> --
>> To post to this group, send email to [hidden email]
>> To unsubscribe from this group, send email to
>> [hidden email]
>>
>> http://www.clubSmalltalk.org
>> ---
>> Has recibido este mensaje porque estás suscrito al grupo
>> "ClubSmalltalk" de Grupos de Google.
>> Para anular la suscripción a este grupo y dejar de recibir sus
>> mensajes, envía un correo electrónico a
>> [hidden email]
>> <mailto:[hidden email]>.
>> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>
>
>
> ---
> El software de antivirus Avast ha analizado este correo electrónico en busca
> de virus.
> https://www.avast.com/antivirus
>
> --
> --
> To post to this group, send email to [hidden email]
> To unsubscribe from this group, send email to
> [hidden email]
>
> http://www.clubSmalltalk.org
> ---
> Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de
> Grupos de Google.
> Para anular la suscripción a este grupo y dejar de recibir sus mensajes,
> envía un correo electrónico a [hidden email].
> Para obtener más opciones, visita https://groups.google.com/d/optout.
>


--
Saludos cordiales,

Guillermo Schwarz

--
--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]

http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a [hidden email].
Para obtener más opciones, visita https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: De qué forma se definen los métodos en Pharo?

javiergelatti
Muchas gracias Bruno y Guillermo! Tengo mucho que aprender 😅
El lunes, 1 de febrero de 2016, 13:06:22 (UTC-3), Guillermo Schwarz escribió:
ok, pero esa es la implementación interna. Podría ser otra. En la
práctica es el compilador el que se encarga de crear los métodos (lo
que es lógico si piensas que los métodos están siempre compilados a
bytecode)... cuando editas un método en realidad lo que ocurre es que
el objeto "method" tiene un puntero a donde se encuentra el fuente del
método dentro de un archivo de log. Al hacer "save", en realidad lo
que hace el compilador es crear un nuevo método, descarta el antiguo
(nadie apunta a él => garbage collection), el nuevo fuente se guarda
en el log, y el nuevo método apunta en el log al punto donde está
guardado el fuente.

Es ingenioso y al mismo tiempo muy eficiente, pero sigue siendo la
implementación. Eso confunde a los newbies, IMHO.

Si eres newbie... en la práctica lo que tienes que hacer para definir
un nuevo método en una clase es ir al systemBrowser o al class browser
y hacer click derecho sobre la clase y "new method".

Un hack es tomar un método que ya existe, editarlo cambiándole el
nombre, y el entorno se encarga de crear un nuevo método. No es muy
intuitivo para los primerizos, pero funciona.

On 2/1/16, Smalltalk <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="VJDwBV77BwAJ" rel="nofollow" onmousedown="this.href=&#39;javascript:&#39;;return true;" onclick="this.href=&#39;javascript:&#39;;return true;">smal...@...> wrote:

> Hola,
>
> Los metodos son:
> Behavior>>compile:
> Class>>compile:categories:
> ....
>
> Busca por que hay mas metodos para compilar codigo en la jerarquia de
> clases de Behavior.
>
> MyClass compile: 'testMethod
>      ^nil'.
>
> saludos,
> bruno
>
> El 31/01/2016 a las 22:59, Facundo Javier Gelatti escibió:
>> Hola a todos!
>>
>> Cuando me encontré por primera vez con smalltalk, me resultó buenísima
>> la idea de que las clases se definan enviando un mensaje a la
>> superclase, y me surgió la duda (todavía sin resolver) sobre qué pasa
>> cuando acepto el código de un método en el browser. ¿Se termina
>> enviando algún mensaje "parecido" al que sirve para definir una clase?
>> Me imaginaba algo así como:
>>
>>     |
>>     ClassNamedefineMethod:#message:selector: as: [ :arg1 :arg2 |
>>     ...
>>     ]
>>     |
>>
>> Saludos!
>> --
>
> ---
> El software de antivirus Avast ha analizado este correo electrónico en busca
> de virus.
> <a href="https://www.avast.com/antivirus" target="_blank" rel="nofollow" onmousedown="this.href=&#39;https://www.google.com/url?q\75https%3A%2F%2Fwww.avast.com%2Fantivirus\46sa\75D\46sntz\0751\46usg\75AFQjCNFKLvnpDv0lgK5pU3VEfIU9tx2wrg&#39;;return true;" onclick="this.href=&#39;https://www.google.com/url?q\75https%3A%2F%2Fwww.avast.com%2Fantivirus\46sa\75D\46sntz\0751\46usg\75AFQjCNFKLvnpDv0lgK5pU3VEfIU9tx2wrg&#39;;return true;">https://www.avast.com/antivirus
>
> --

--
Saludos cordiales,

Guillermo Schwarz

--
--
To post to this group, send email to [hidden email]
To unsubscribe from this group, send email to [hidden email]
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a [hidden email].
Para acceder a más opciones, visita https://groups.google.com/d/optout.