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,
Guille2012/4/29 Vitaly Kosenko <vitaly.kosenko@gmail.com>
Mickey!) I don't understand how does it help me.Nice! Almost as elegant as Ward's legendary��
Symbol>>value: anObject��
^anObject perform: self��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 argumentsHow 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.You should look the class Message too.x perform: perf asSymbol withArguments: args
(and all other classes and methods like Behavior, Class, Metaclass, Method and Object)
Jean-Fran��ois2012/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 it2012/4/29 Georg Heeg [via Smalltalk] <[hidden email]>
Von: [hidden email]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-----
[mailto:[hidden email]] Im Auftrag von vittlyAn: [hidden email]Gesendet: Sonntag, 29. April 2012 10:25Betreff: [Esug-list] metaprogramming in smalltalkHi! 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://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
_______________________________________________
Esug-list mailing list
[hidden email]
http://lists.esug.org/mailman/listinfo/esug-list_lists.esug.org
http://forum.world.st/metaprogramming-in-smalltalk-tp4595928p4596217.htmlIf you reply to this email, your message will be added to the discussion below:
View this message in context: Re: metaprogramming in smalltalk
_______________________________________________
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