Setting values using reflection
I've been playing with smalltalk casually now, for months and really like it. But I"m clearly still a newb. I've reached the point in a small project where I want to set the values on my object based on the values that are in a dictionary. The dictionary is filled with a set of keys that represent attributes on the object. So for a simple example, imagine I have an object which has accessors for 'title' and 'title:'. I want to iterate across the set of keys, being certain that each key is a valid msg to send to myOBject. The send the object the message with the value from the dictionary. Now, I understand that I can do: myObject perform: 'title' asSymbol. and use that as a way to message myObject with the selector 'title' As I understand it this is equivalent to getting the value with: myObject title What I've looked for an been unable to find is how to set the value. What is the equivalent to: myOBject title: 'A new title'. using perform? Thank you for your help. Tony -- View this message in context: http://forum.world.st/Setting-values-using-reflection-tp3676289p3676289.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
anObject perform: (mySymbol, ':' ) asSymbol with: aValue stef On Jul 18, 2011, at 9:59 PM, tgiaccone wrote:
I've been playing with smalltalk casually now, for months and really like it. But I"m clearly still a newb.
I've reached the point in a small project where I want to set the values on my object based on the values that are in a dictionary. The dictionary is filled with a set of keys that represent attributes on the object. So for a simple example, imagine I have an object which has accessors for 'title' and 'title:'.
I want to iterate across the set of keys, being certain that each key is a valid msg to send to myOBject. The send the object the message with the value from the dictionary.
Now, I understand that I can do:
myObject perform: 'title' asSymbol.
and use that as a way to message myObject with the selector 'title'
As I understand it this is equivalent to getting the value with:
myObject title
What I've looked for an been unable to find is how to set the value.
What is the equivalent to:
myOBject title: 'A new title'.
using perform?
Thank you for your help.
Tony
-- View this message in context: http://forum.world.st/Setting-values-using-reflection-tp3676289p3676289.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
As Stef said, you can use #perform:with: or #perform:with:with: or #perform:with:with:with: or..... #perform: selector withArguments: argArray :) On Mon, Jul 18, 2011 at 10:41 PM, Stéphane Ducasse < Stephane.Ducasse@inria.fr> wrote:
anObject perform: (mySymbol, ':' ) asSymbol with: aValue stef
On Jul 18, 2011, at 9:59 PM, tgiaccone wrote:
I've been playing with smalltalk casually now, for months and really like it. But I"m clearly still a newb.
I've reached the point in a small project where I want to set the values on my object based on the values that are in a dictionary. The dictionary is filled with a set of keys that represent attributes on the object. So for a simple example, imagine I have an object which has accessors for 'title' and 'title:'.
I want to iterate across the set of keys, being certain that each key is a valid msg to send to myOBject. The send the object the message with the value from the dictionary.
Now, I understand that I can do:
myObject perform: 'title' asSymbol.
and use that as a way to message myObject with the selector 'title'
As I understand it this is equivalent to getting the value with:
myObject title
What I've looked for an been unable to find is how to set the value.
What is the equivalent to:
myOBject title: 'A new title'.
using perform?
Thank you for your help.
Tony
-- View this message in context: http://forum.world.st/Setting-values-using-reflection-tp3676289p3676289.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
-- Mariano http://marianopeck.wordpress.com
brilliant, thank you very much. Tony On Mon, Jul 18, 2011 at 4:47 PM, Mariano Martinez Peck < marianopeck@gmail.com> wrote:
As Stef said, you can use #perform:with: or #perform:with:with: or #perform:with:with:with: or.....
#perform: selector withArguments: argArray
:)
On Mon, Jul 18, 2011 at 10:41 PM, Stéphane Ducasse < Stephane.Ducasse@inria.fr> wrote:
anObject perform: (mySymbol, ':' ) asSymbol with: aValue stef
On Jul 18, 2011, at 9:59 PM, tgiaccone wrote:
I've been playing with smalltalk casually now, for months and really like it. But I"m clearly still a newb.
I've reached the point in a small project where I want to set the values on my object based on the values that are in a dictionary. The dictionary is filled with a set of keys that represent attributes on the object. So for a simple example, imagine I have an object which has accessors for 'title' and 'title:'.
I want to iterate across the set of keys, being certain that each key is a valid msg to send to myOBject. The send the object the message with the value from the dictionary.
Now, I understand that I can do:
myObject perform: 'title' asSymbol.
and use that as a way to message myObject with the selector 'title'
As I understand it this is equivalent to getting the value with:
myObject title
What I've looked for an been unable to find is how to set the value.
What is the equivalent to:
myOBject title: 'A new title'.
using perform?
Thank you for your help.
Tony
-- View this message in context: http://forum.world.st/Setting-values-using-reflection-tp3676289p3676289.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
-- Mariano http://marianopeck.wordpress.com
On 18 juil. 2011, at 22:41, Stéphane Ducasse wrote:
anObject perform: (mySymbol, ':' ) asSymbol with: aValue
A bit more "user-friendly", or less intention-revealing if you wish: anObject perform: mySymbol asMutator with: aValue #asMutator does the same thing as in the above snippet. Also just from the subject I first thought you wanted to set instance variables so here it is for the record :) #instVarAt:put: and #instVarNamed:put: also in class Object
stef
On Jul 18, 2011, at 9:59 PM, tgiaccone wrote:
I've been playing with smalltalk casually now, for months and really like it. But I"m clearly still a newb.
I've reached the point in a small project where I want to set the values on my object based on the values that are in a dictionary. The dictionary is filled with a set of keys that represent attributes on the object. So for a simple example, imagine I have an object which has accessors for 'title' and 'title:'.
I want to iterate across the set of keys, being certain that each key is a valid msg to send to myOBject. The send the object the message with the value from the dictionary.
Now, I understand that I can do:
myObject perform: 'title' asSymbol.
and use that as a way to message myObject with the selector 'title'
As I understand it this is equivalent to getting the value with:
myObject title
What I've looked for an been unable to find is how to set the value.
What is the equivalent to:
myOBject title: 'A new title'.
using perform?
Thank you for your help.
Tony
-- View this message in context: http://forum.world.st/Setting-values-using-reflection-tp3676289p3676289.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.
-- Simon Denier
participants (5)
-
Mariano Martinez Peck -
Simon Denier -
Stéphane Ducasse -
tgiaccone -
Tony Giaccone