Re: [Esug-list] metaprogramming in smalltalk

VK
Vitaly Kosenko
Sun, Apr 29, 2012 6:05 PM

Nice! Almost as elegant as Ward's legendary
Symbol>>value: anObject
^anObject perform: self

Mickey!) I don't understand how does it help me.

The method is called #perform:with: and it takes two arguments.

Yes. But what if I need to emulate "x perform: y with: z" - there is three
arguments

How can I do this using perform?

Yes, there is Behavior class that compile everything so non can help this
method is good. But what about perform? Message class also require selector
and what is selector for keyword messages?

2012/4/29 Jean-François LEFEVRE jflefevre@gmail.com

You probably want to do something like this :

| x y plu perf wi args |
x := 3.
y := 4.
plu := '+'.
perf := 'perform:withArguments:'.
args := Array new: 1.
args at: 1 put: y.
x perform: perf asSymbol withArguments: args

You should look the class Message too.
(and all other classes and methods like Behavior, Class, Metaclass, Method
and Object)

Jean-François

2012/4/29 Vitaly Kosenko vitaly.kosenko@gmail.com

Ok. perform: is working for arithmetic but what about perform: itself?
| x y plu perf wi args |
x := 3.
y := 4.
plu := '+'.
perf := 'perform:'.
wi := 'with:'.
args := Array new: 3.
args
at: 1 put: plu asSymbol;
at: 2 put: wi asSymbol;
at: 3 put: y.
x perform: perf asSymbol withArguments: args.

This code tells me that there is wrong number of arguments in permforn:
How can I fix it?

2012/4/29 vittly vitaly.kosenko@gmail.com

Mmm thnx for replie! I'll run this code and experemt with it

2012/4/29 Georg Heeg [via Smalltalk] <[hidden email]http://user/SendEmail.jtp?type=node&node=4596244&i=0

Please try to understand the following code:

| a b c |

a := 3.
b := 4.
c := '+'.
^a perform: c asSymbol with: b

Georg Heeg eK, Dortmund und Köthen, HR Dortmund A 12812
Wallstraße 22, 06366 Köthen
Tel. +49-3496-214328, Fax +49-3496-214712

-----Ursprüngliche Nachricht-----
Von: [hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=0
[mailto:[hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=1]
Im Auftrag von vittly
Gesendet: Sonntag, 29. April 2012 10:25
An: [hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=2
Betreff: [Esug-list] metaprogramming in smalltalk

Hi! Please could you help me understand smalltalk capabilities in
metaprogramming? Q: could I construct arbitrary message by program?
Create
keywords from strings and than build sequence of them to make a
message. Mm?
Or may be store keywords in variables and then pass variables withing
messages extracting stored keywords?
Am I dreamer?)

--
View this message in context:

http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4595928.html
Sent from the ESUG mailing list archive at Nabble.com.


Esug-list mailing list
[hidden email] http://user/SendEmail.jtp?type=node&node=4596217&i=3
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org


Esug-list mailing list
[hidden email] http://user/SendEmail.jtp?type=node&node=4596217&i=4
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org


If you reply to this email, your message will be added to the
discussion below:

http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596217.html
To unsubscribe from metaprogramming in smalltalk, click here.
NAMLhttp://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml


View this message in context: Re: metaprogramming in smalltalkhttp://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596244.html

Sent from the ESUG mailing list archivehttp://forum.world.st/ESUG-f1589038.htmlat Nabble.com.


Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org

> > Nice! Almost as elegant as Ward's legendary > Symbol>>value: anObject > ^anObject perform: self Mickey!) I don't understand how does it help me. The method is called #perform:with: and it takes two arguments. Yes. But what if I need to emulate "x perform: y with: z" - there is three arguments How can I do this using perform? Yes, there is Behavior class that compile everything so non can help this method is good. But what about perform? Message class also require selector and what is selector for keyword messages? 2012/4/29 Jean-François LEFEVRE <jflefevre@gmail.com> > You probably want to do something like this : > > > | x y plu perf wi args | > x := 3. > y := 4. > plu := '+'. > perf := 'perform:withArguments:'. > args := Array new: 1. > args at: 1 put: y. > x perform: perf asSymbol withArguments: args > > You should look the class Message too. > (and all other classes and methods like Behavior, Class, Metaclass, Method > and Object) > > Jean-François > > > > 2012/4/29 Vitaly Kosenko <vitaly.kosenko@gmail.com> > >> Ok. perform: is working for arithmetic but what about perform: itself? >> | x y plu perf wi args | >> x := 3. >> y := 4. >> plu := '+'. >> perf := 'perform:'. >> wi := 'with:'. >> args := Array new: 3. >> args >> at: 1 put: plu asSymbol; >> at: 2 put: wi asSymbol; >> at: 3 put: y. >> x perform: perf asSymbol withArguments: args. >> >> This code tells me that there is wrong number of arguments in permforn: >> How can I fix it? >> >> >> 2012/4/29 vittly <vitaly.kosenko@gmail.com> >> >>> Mmm thnx for replie! I'll run this code and experemt with it >>> >>> 2012/4/29 Georg Heeg [via Smalltalk] <[hidden email]<http://user/SendEmail.jtp?type=node&node=4596244&i=0> >>> > >>> >>>> Please try to understand the following code: >>>> >>>> | a b c | >>>> >>>> a := 3. >>>> b := 4. >>>> c := '+'. >>>> ^a perform: c asSymbol with: b >>>> >>>> Georg Heeg eK, Dortmund und Köthen, HR Dortmund A 12812 >>>> Wallstraße 22, 06366 Köthen >>>> Tel. +49-3496-214328, Fax +49-3496-214712 >>>> >>>> >>>> -----Ursprüngliche Nachricht----- >>>> Von: [hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=0> >>>> [mailto:[hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=1>] >>>> Im Auftrag von vittly >>>> Gesendet: Sonntag, 29. April 2012 10:25 >>>> An: [hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=2> >>>> Betreff: [Esug-list] metaprogramming in smalltalk >>>> >>>> Hi! Please could you help me understand smalltalk capabilities in >>>> metaprogramming? Q: could I construct arbitrary message by program? >>>> Create >>>> keywords from strings and than build sequence of them to make a >>>> message. Mm? >>>> Or may be store keywords in variables and then pass variables withing >>>> messages extracting stored keywords? >>>> Am I dreamer?) >>>> >>>> >>>> -- >>>> View this message in context: >>>> >>>> http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4595928.html >>>> Sent from the ESUG mailing list archive at Nabble.com. >>>> >>>> _______________________________________________ >>>> Esug-list mailing list >>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4596217&i=3> >>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>> >>>> >>>> >>>> _______________________________________________ >>>> Esug-list mailing list >>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4596217&i=4> >>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>> >>>> >>>> ------------------------------ >>>> If you reply to this email, your message will be added to the >>>> discussion below: >>>> >>>> http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596217.html >>>> To unsubscribe from metaprogramming in smalltalk, click here. >>>> NAML<http://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> >>>> >>> >>> >>> ------------------------------ >>> View this message in context: Re: metaprogramming in smalltalk<http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596244.html> >>> >>> Sent from the ESUG mailing list archive<http://forum.world.st/ESUG-f1589038.html>at Nabble.com. >>> >>> _______________________________________________ >>> Esug-list mailing list >>> Esug-list@lists.esug.org >>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>> >>> >> >> _______________________________________________ >> Esug-list mailing list >> Esug-list@lists.esug.org >> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >> >> >
GP
Guillermo Polito
Sun, Apr 29, 2012 6:11 PM

Hi Vitaly!

try to think it like this: #perform:with: is a reflective operation to send
messags to an object.  Thus, if you are trying to send an object a message
like:

object perform: someSelector with: someArgument.

  • The receiver is object
  • the selector of the message is #perform:with:
  • the arguments of #perform:with: are someSelector and someArgument.

Then, what you have to do is

object
perform: #perform:with:
withArguments: { someSelector . someArgument }

Because #perform: and #with: are not two different messages, they are two
keywords of the same selector, in the same message.  Then, you have to
treat them together.

Cheers,
Guille

2012/4/29 Vitaly Kosenko vitaly.kosenko@gmail.com

Nice! Almost as elegant as Ward's legendary

Symbol>>value: anObject
^anObject perform: self

Mickey!) I don't understand how does it help me.

The method is called #perform:with: and it takes two arguments.

Yes. But what if I need to emulate "x perform: y with: z" - there is three
arguments

How can I do this using perform?

Yes, there is Behavior class that compile everything so non can help this
method is good. But what about perform? Message class also require selector
and what is selector for keyword messages?

2012/4/29 Jean-François LEFEVRE jflefevre@gmail.com

You probably want to do something like this :

| x y plu perf wi args |
x := 3.
y := 4.
plu := '+'.
perf := 'perform:withArguments:'.
args := Array new: 1.
args at: 1 put: y.
x perform: perf asSymbol withArguments: args

You should look the class Message too.
(and all other classes and methods like Behavior, Class, Metaclass,
Method and Object)

Jean-François

2012/4/29 Vitaly Kosenko vitaly.kosenko@gmail.com

Ok. perform: is working for arithmetic but what about perform: itself?
| x y plu perf wi args |
x := 3.
y := 4.
plu := '+'.
perf := 'perform:'.
wi := 'with:'.
args := Array new: 3.
args
at: 1 put: plu asSymbol;
at: 2 put: wi asSymbol;
at: 3 put: y.
x perform: perf asSymbol withArguments: args.

This code tells me that there is wrong number of arguments in permforn:
How can I fix it?

2012/4/29 vittly vitaly.kosenko@gmail.com

Mmm thnx for replie! I'll run this code and experemt with it

2012/4/29 Georg Heeg [via Smalltalk] <[hidden email]http://user/SendEmail.jtp?type=node&node=4596244&i=0

Please try to understand the following code:

| a b c |

a := 3.
b := 4.
c := '+'.
^a perform: c asSymbol with: b

Georg Heeg eK, Dortmund und Köthen, HR Dortmund A 12812
Wallstraße 22, 06366 Köthen
Tel. +49-3496-214328, Fax +49-3496-214712

-----Ursprüngliche Nachricht-----
Von: [hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=0
[mailto:[hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=1]
Im Auftrag von vittly
Gesendet: Sonntag, 29. April 2012 10:25
An: [hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=2
Betreff: [Esug-list] metaprogramming in smalltalk

Hi! Please could you help me understand smalltalk capabilities in
metaprogramming? Q: could I construct arbitrary message by program?
Create
keywords from strings and than build sequence of them to make a
message. Mm?
Or may be store keywords in variables and then pass variables withing
messages extracting stored keywords?
Am I dreamer?)

--
View this message in context:

http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4595928.html
Sent from the ESUG mailing list archive at Nabble.com.


Esug-list mailing list
[hidden email] http://user/SendEmail.jtp?type=node&node=4596217&i=3
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org


Esug-list mailing list
[hidden email] http://user/SendEmail.jtp?type=node&node=4596217&i=4
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org


If you reply to this email, your message will be added to the
discussion below:

http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596217.html
To unsubscribe from metaprogramming in smalltalk, click here.
NAMLhttp://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml


View this message in context: Re: metaprogramming in smalltalkhttp://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596244.html

Sent from the ESUG mailing list archivehttp://forum.world.st/ESUG-f1589038.htmlat Nabble.com.


Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org

Hi Vitaly! try to think it like this: #perform:with: is a reflective operation to send messags to an object. Thus, if you are trying to send an object a message like: object perform: someSelector with: someArgument. - The receiver is object - the selector of the message is #perform:with: - the arguments of #perform:with: are someSelector and someArgument. Then, what you have to do is object perform: #perform:with: withArguments: { someSelector . someArgument } Because #perform: and #with: are not two different messages, they are two keywords of the same selector, in the same message. Then, you have to treat them together. Cheers, Guille 2012/4/29 Vitaly Kosenko <vitaly.kosenko@gmail.com> > Nice! Almost as elegant as Ward's legendary >> Symbol>>value: anObject >> ^anObject perform: self > > Mickey!) I don't understand how does it help me. > > The method is called #perform:with: and it takes two arguments. > > Yes. But what if I need to emulate "x perform: y with: z" - there is three > arguments > > How can I do this using perform? > > Yes, there is Behavior class that compile everything so non can help this > method is good. But what about perform? Message class also require selector > and what is selector for keyword messages? > > 2012/4/29 Jean-François LEFEVRE <jflefevre@gmail.com> > >> You probably want to do something like this : >> >> >> | x y plu perf wi args | >> x := 3. >> y := 4. >> plu := '+'. >> perf := 'perform:withArguments:'. >> args := Array new: 1. >> args at: 1 put: y. >> x perform: perf asSymbol withArguments: args >> >> You should look the class Message too. >> (and all other classes and methods like Behavior, Class, Metaclass, >> Method and Object) >> >> Jean-François >> >> >> >> 2012/4/29 Vitaly Kosenko <vitaly.kosenko@gmail.com> >> >>> Ok. perform: is working for arithmetic but what about perform: itself? >>> | x y plu perf wi args | >>> x := 3. >>> y := 4. >>> plu := '+'. >>> perf := 'perform:'. >>> wi := 'with:'. >>> args := Array new: 3. >>> args >>> at: 1 put: plu asSymbol; >>> at: 2 put: wi asSymbol; >>> at: 3 put: y. >>> x perform: perf asSymbol withArguments: args. >>> >>> This code tells me that there is wrong number of arguments in permforn: >>> How can I fix it? >>> >>> >>> 2012/4/29 vittly <vitaly.kosenko@gmail.com> >>> >>>> Mmm thnx for replie! I'll run this code and experemt with it >>>> >>>> 2012/4/29 Georg Heeg [via Smalltalk] <[hidden email]<http://user/SendEmail.jtp?type=node&node=4596244&i=0> >>>> > >>>> >>>>> Please try to understand the following code: >>>>> >>>>> | a b c | >>>>> >>>>> a := 3. >>>>> b := 4. >>>>> c := '+'. >>>>> ^a perform: c asSymbol with: b >>>>> >>>>> Georg Heeg eK, Dortmund und Köthen, HR Dortmund A 12812 >>>>> Wallstraße 22, 06366 Köthen >>>>> Tel. +49-3496-214328, Fax +49-3496-214712 >>>>> >>>>> >>>>> -----Ursprüngliche Nachricht----- >>>>> Von: [hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=0> >>>>> [mailto:[hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=1>] >>>>> Im Auftrag von vittly >>>>> Gesendet: Sonntag, 29. April 2012 10:25 >>>>> An: [hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=2> >>>>> Betreff: [Esug-list] metaprogramming in smalltalk >>>>> >>>>> Hi! Please could you help me understand smalltalk capabilities in >>>>> metaprogramming? Q: could I construct arbitrary message by program? >>>>> Create >>>>> keywords from strings and than build sequence of them to make a >>>>> message. Mm? >>>>> Or may be store keywords in variables and then pass variables withing >>>>> messages extracting stored keywords? >>>>> Am I dreamer?) >>>>> >>>>> >>>>> -- >>>>> View this message in context: >>>>> >>>>> http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4595928.html >>>>> Sent from the ESUG mailing list archive at Nabble.com. >>>>> >>>>> _______________________________________________ >>>>> Esug-list mailing list >>>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4596217&i=3> >>>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Esug-list mailing list >>>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4596217&i=4> >>>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>>> >>>>> >>>>> ------------------------------ >>>>> If you reply to this email, your message will be added to the >>>>> discussion below: >>>>> >>>>> http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596217.html >>>>> To unsubscribe from metaprogramming in smalltalk, click here. >>>>> NAML<http://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> >>>>> >>>> >>>> >>>> ------------------------------ >>>> View this message in context: Re: metaprogramming in smalltalk<http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596244.html> >>>> >>>> Sent from the ESUG mailing list archive<http://forum.world.st/ESUG-f1589038.html>at Nabble.com. >>>> >>>> _______________________________________________ >>>> Esug-list mailing list >>>> Esug-list@lists.esug.org >>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>> >>>> >>> >>> _______________________________________________ >>> Esug-list mailing list >>> Esug-list@lists.esug.org >>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>> >>> >> > > _______________________________________________ > Esug-list mailing list > Esug-list@lists.esug.org > http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org > >
VK
Vitaly Kosenko
Sun, Apr 29, 2012 6:17 PM

| x y plu perf wi sel args |
x := 3.
y := 4.
plu := '+'.
perf := 'perform:'.
wi := 'with:'.
sel := perf,wi.
args := Array new: 2.
args
at: 1 put: plu asSymbol;
at: 2 put: y.
x perform: sel asSymbol withArguments: args.

It works! Great! Thanks a lot. About Pharo examples book: I have red some
chapters but the real understanding comes only in prectice)

2012/4/30 Guillermo Polito guillermopolito@gmail.com

Hi Vitaly!

try to think it like this: #perform:with: is a reflective operation to
send messags to an object.  Thus, if you are trying to send an object a
message like:

object perform: someSelector with: someArgument.

  • The receiver is object
  • the selector of the message is #perform:with:
  • the arguments of #perform:with: are someSelector and someArgument.

Then, what you have to do is

object
perform: #perform:with:
withArguments: { someSelector . someArgument }

Because #perform: and #with: are not two different messages, they are two
keywords of the same selector, in the same message.  Then, you have to
treat them together.

Cheers,
Guille

2012/4/29 Vitaly Kosenko vitaly.kosenko@gmail.com

Nice! Almost as elegant as Ward's legendary

Symbol>>value: anObject
^anObject perform: self

Mickey!) I don't understand how does it help me.

The method is called #perform:with: and it takes two arguments.

Yes. But what if I need to emulate "x perform: y with: z" - there is
three arguments

How can I do this using perform?

Yes, there is Behavior class that compile everything so non can help this
method is good. But what about perform? Message class also require selector
and what is selector for keyword messages?

2012/4/29 Jean-François LEFEVRE jflefevre@gmail.com

You probably want to do something like this :

| x y plu perf wi args |
x := 3.
y := 4.
plu := '+'.
perf := 'perform:withArguments:'.
args := Array new: 1.
args at: 1 put: y.
x perform: perf asSymbol withArguments: args

You should look the class Message too.
(and all other classes and methods like Behavior, Class, Metaclass,
Method and Object)

Jean-François

2012/4/29 Vitaly Kosenko vitaly.kosenko@gmail.com

Ok. perform: is working for arithmetic but what about perform: itself?
| x y plu perf wi args |
x := 3.
y := 4.
plu := '+'.
perf := 'perform:'.
wi := 'with:'.
args := Array new: 3.
args
at: 1 put: plu asSymbol;
at: 2 put: wi asSymbol;
at: 3 put: y.
x perform: perf asSymbol withArguments: args.

This code tells me that there is wrong number of arguments in permforn:
How can I fix it?

2012/4/29 vittly vitaly.kosenko@gmail.com

Mmm thnx for replie! I'll run this code and experemt with it

2012/4/29 Georg Heeg [via Smalltalk] <[hidden email]http://user/SendEmail.jtp?type=node&node=4596244&i=0

Please try to understand the following code:

| a b c |

a := 3.
b := 4.
c := '+'.
^a perform: c asSymbol with: b

Georg Heeg eK, Dortmund und Köthen, HR Dortmund A 12812
Wallstraße 22, 06366 Köthen
Tel. +49-3496-214328, Fax +49-3496-214712

-----Ursprüngliche Nachricht-----
Von: [hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=0
[mailto:[hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=1]
Im Auftrag von vittly
Gesendet: Sonntag, 29. April 2012 10:25
An: [hidden email]http://user/SendEmail.jtp?type=node&node=4596217&i=2
Betreff: [Esug-list] metaprogramming in smalltalk

Hi! Please could you help me understand smalltalk capabilities in
metaprogramming? Q: could I construct arbitrary message by program?
Create
keywords from strings and than build sequence of them to make a
message. Mm?
Or may be store keywords in variables and then pass variables withing
messages extracting stored keywords?
Am I dreamer?)

--
View this message in context:

http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4595928.html
Sent from the ESUG mailing list archive at Nabble.com.


Esug-list mailing list
[hidden email] http://user/SendEmail.jtp?type=node&node=4596217&i=3
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org


Esug-list mailing list
[hidden email] http://user/SendEmail.jtp?type=node&node=4596217&i=4
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org


If you reply to this email, your message will be added to the
discussion below:

http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596217.html
To unsubscribe from metaprogramming in smalltalk, click here.
NAMLhttp://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml


View this message in context: Re: metaprogramming in smalltalkhttp://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596244.html

Sent from the ESUG mailing list archivehttp://forum.world.st/ESUG-f1589038.htmlat Nabble.com.


Esug-list mailing list
Esug-list@lists.esug.org
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org

| x y plu perf wi sel args | x := 3. y := 4. plu := '+'. perf := 'perform:'. wi := 'with:'. sel := perf,wi. args := Array new: 2. args at: 1 put: plu asSymbol; at: 2 put: y. x perform: sel asSymbol withArguments: args. It works! Great! Thanks a lot. About Pharo examples book: I have red some chapters but the real understanding comes only in prectice) 2012/4/30 Guillermo Polito <guillermopolito@gmail.com> > Hi Vitaly! > > try to think it like this: #perform:with: is a reflective operation to > send messags to an object. Thus, if you are trying to send an object a > message like: > > object perform: someSelector with: someArgument. > > - The receiver is object > - the selector of the message is #perform:with: > - the arguments of #perform:with: are someSelector and someArgument. > > Then, what you have to do is > > object > perform: #perform:with: > withArguments: { someSelector . someArgument } > > Because #perform: and #with: are not two different messages, they are two > keywords of the same selector, in the same message. Then, you have to > treat them together. > > Cheers, > Guille > > > 2012/4/29 Vitaly Kosenko <vitaly.kosenko@gmail.com> > >> Nice! Almost as elegant as Ward's legendary >>> Symbol>>value: anObject >>> ^anObject perform: self >> >> Mickey!) I don't understand how does it help me. >> >> The method is called #perform:with: and it takes two arguments. >> >> Yes. But what if I need to emulate "x perform: y with: z" - there is >> three arguments >> >> How can I do this using perform? >> >> Yes, there is Behavior class that compile everything so non can help this >> method is good. But what about perform? Message class also require selector >> and what is selector for keyword messages? >> >> 2012/4/29 Jean-François LEFEVRE <jflefevre@gmail.com> >> >>> You probably want to do something like this : >>> >>> >>> | x y plu perf wi args | >>> x := 3. >>> y := 4. >>> plu := '+'. >>> perf := 'perform:withArguments:'. >>> args := Array new: 1. >>> args at: 1 put: y. >>> x perform: perf asSymbol withArguments: args >>> >>> You should look the class Message too. >>> (and all other classes and methods like Behavior, Class, Metaclass, >>> Method and Object) >>> >>> Jean-François >>> >>> >>> >>> 2012/4/29 Vitaly Kosenko <vitaly.kosenko@gmail.com> >>> >>>> Ok. perform: is working for arithmetic but what about perform: itself? >>>> | x y plu perf wi args | >>>> x := 3. >>>> y := 4. >>>> plu := '+'. >>>> perf := 'perform:'. >>>> wi := 'with:'. >>>> args := Array new: 3. >>>> args >>>> at: 1 put: plu asSymbol; >>>> at: 2 put: wi asSymbol; >>>> at: 3 put: y. >>>> x perform: perf asSymbol withArguments: args. >>>> >>>> This code tells me that there is wrong number of arguments in permforn: >>>> How can I fix it? >>>> >>>> >>>> 2012/4/29 vittly <vitaly.kosenko@gmail.com> >>>> >>>>> Mmm thnx for replie! I'll run this code and experemt with it >>>>> >>>>> 2012/4/29 Georg Heeg [via Smalltalk] <[hidden email]<http://user/SendEmail.jtp?type=node&node=4596244&i=0> >>>>> > >>>>> >>>>>> Please try to understand the following code: >>>>>> >>>>>> | a b c | >>>>>> >>>>>> a := 3. >>>>>> b := 4. >>>>>> c := '+'. >>>>>> ^a perform: c asSymbol with: b >>>>>> >>>>>> Georg Heeg eK, Dortmund und Köthen, HR Dortmund A 12812 >>>>>> Wallstraße 22, 06366 Köthen >>>>>> Tel. +49-3496-214328, Fax +49-3496-214712 >>>>>> >>>>>> >>>>>> -----Ursprüngliche Nachricht----- >>>>>> Von: [hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=0> >>>>>> [mailto:[hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=1>] >>>>>> Im Auftrag von vittly >>>>>> Gesendet: Sonntag, 29. April 2012 10:25 >>>>>> An: [hidden email]<http://user/SendEmail.jtp?type=node&node=4596217&i=2> >>>>>> Betreff: [Esug-list] metaprogramming in smalltalk >>>>>> >>>>>> Hi! Please could you help me understand smalltalk capabilities in >>>>>> metaprogramming? Q: could I construct arbitrary message by program? >>>>>> Create >>>>>> keywords from strings and than build sequence of them to make a >>>>>> message. Mm? >>>>>> Or may be store keywords in variables and then pass variables withing >>>>>> messages extracting stored keywords? >>>>>> Am I dreamer?) >>>>>> >>>>>> >>>>>> -- >>>>>> View this message in context: >>>>>> >>>>>> http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4595928.html >>>>>> Sent from the ESUG mailing list archive at Nabble.com. >>>>>> >>>>>> _______________________________________________ >>>>>> Esug-list mailing list >>>>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4596217&i=3> >>>>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Esug-list mailing list >>>>>> [hidden email] <http://user/SendEmail.jtp?type=node&node=4596217&i=4> >>>>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>>>> >>>>>> >>>>>> ------------------------------ >>>>>> If you reply to this email, your message will be added to the >>>>>> discussion below: >>>>>> >>>>>> http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596217.html >>>>>> To unsubscribe from metaprogramming in smalltalk, click here. >>>>>> NAML<http://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> >>>>>> >>>>> >>>>> >>>>> ------------------------------ >>>>> View this message in context: Re: metaprogramming in smalltalk<http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596244.html> >>>>> >>>>> Sent from the ESUG mailing list archive<http://forum.world.st/ESUG-f1589038.html>at Nabble.com. >>>>> >>>>> _______________________________________________ >>>>> Esug-list mailing list >>>>> Esug-list@lists.esug.org >>>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> Esug-list mailing list >>>> Esug-list@lists.esug.org >>>> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >>>> >>>> >>> >> >> _______________________________________________ >> Esug-list mailing list >> Esug-list@lists.esug.org >> http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org >> >> >