[NTLK] Need pointers for adding Apply()/Perform()/PerformIfDefined()/etc. to NEWT/0

Morgan Aldridge morgant at makkintosshu.com
Thu Jul 26 08:10:58 EDT 2012


On Tue, Jul 24, 2012 at 9:30 PM, Morgan Aldridge
<morgant at makkintosshu.com> wrote:
>
> My initial implementation of Perform(), internally implemented as
> NcPerform() (see https://gist.github.com/3173823), currently throws an
> exception when trying to convert the slot name to a symbol. I'm
> getting closer, but have opened up an issue on the NEWT/0 project on
> GitHub, in case anyone can chime in:
> https://github.com/gnue/NEWT0/issues/2

Makoto Nukui has been assisting me with this and the implementation is
almost as straightforward as I initially hoped. I have Perform()
implemented and will be getting the others done soon (whenever I have
a few mins). That said, I missed one important part of the note on
it's usage: Perform() and its variants require the message to be a
symbol (either a constant or a named constant). Unfortunately, that
means it's not what I was originally looking for, but obviously well
worth implementing these global functions in NEWT/0.

So, back to my original problem for a sec (if anyone is bothering to
read this thread), do any of the few NewtonScript developers know of a
way to send a message to a frame by method name, not using a symbol?
For example, say I have a frame that contains a method:

    someFrame := { SomeMethod: func() begin
            Print("SomeMethod!");
        end };

Normally this would be called as follows:

    someFrame:SomeMethod();

Alternatively, you can use Perform():

    Perform(someFrame, 'SomeMethod, nil);

But what if I don't know the name of the method I until runtime and
instead had a variable containing the slot/method name and wanted to
call it by that:

    someFrame := { SomeMethod: func() begin
            Print("SomeMethod!");
        end };
    methodName := "SomeMethod";

Can I do something like the following (I've seen this for regular slot
names, but not for message passing)?

    someFrame:(methodName)();

Or, is there some way to programmatically convert a string to a
symbol/constant in NewtonScript?

Thanks in advance,

Morgan
---
http://makkintosshu.com/
http://seriesparts.com/
http://rikuwoiku.com/
http://unna.org/



More information about the NewtonTalk mailing list