[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Using a method as input to another method

Erick Star

1/9/2009 5:49:00 PM

Hi, I was wondering if it was possible to do something like the
following:

class A

def b
stuff
end

def c
stuff
end

def d(x)
self.x
end
end

Then use thing.d(a) with thing an instance of A?
Basically, given a long list of methods belonging to a class, if you
wanted ruby to apply methods based on the state of the program, how
would you set it up besides doing:

case A
when b
thing.stuff
when c
thing.otherstuff
4 Answers

Robert Klemme

1/9/2009 6:07:00 PM

0

On 09.01.2009 18:48, Erick Star wrote:
> Hi, I was wondering if it was possible to do something like the
> following:
>
> class A
>
> def b
> stuff
> end
>
> def c
> stuff
> end
>
> def d(x)
> self.x
> end
> end

You can leave out method d and use send() directly, i.e.

a = A.new
a.send(:b)

However:

> Then use thing.d(a) with thing an instance of A?
> Basically, given a long list of methods belonging to a class, if you
> wanted ruby to apply methods based on the state of the program, how
> would you set it up besides doing:
>
> case A
> when b
> thing.stuff
> when c
> thing.otherstuff

State pattern comes to mind.

http://en.wikipedia.org/wiki/Sta...

There are a number of options for modeling this besides of state
pattern. Generally any OO approach exploits overriding of methods, i.e.
you have several classes which share a method with identical signature
but different behavior.

Kind regards

robert


--
remember.guy do |as, often| as.you_can - without end

Erick Star

1/9/2009 6:18:00 PM

0

Thank you for your help,
This question is part of a larger something I've been curious about for
a while. I, essentially, want to make a set of rules and basic methods,
then develop a program that can, when given input, determine what
methods to apply and apply them; and, depending on the rules, if it can
generate a new method that would give a more desirable outcome.
Basically, I want to make a program that will have the ability to
reprogram/build on it self.

Robert Klemme wrote:
> On 09.01.2009 18:48, Erick Star wrote:
>> stuff
>> end
>>
>> def d(x)
>> self.x
>> end
>> end
>
> You can leave out method d and use send() directly, i.e.
>
> a = A.new
> a.send(:b)
>
> However:
>
>> Then use thing.d(a) with thing an instance of A?
>> Basically, given a long list of methods belonging to a class, if you
>> wanted ruby to apply methods based on the state of the program, how
>> would you set it up besides doing:
>>
>> case A
>> when b
>> thing.stuff
>> when c
>> thing.otherstuff
>
> State pattern comes to mind.
>
> http://en.wikipedia.org/wiki/Sta...
>
> There are a number of options for modeling this besides of state
> pattern. Generally any OO approach exploits overriding of methods, i.e.
> you have several classes which share a method with identical signature
> but different behavior.
>
> Kind regards
>
> robert

--
Posted via http://www.ruby-....

Matt Harrison

1/9/2009 6:42:00 PM

0

Erick Star wrote:
> Thank you for your help,
> This question is part of a larger something I've been curious about for
> a while. I, essentially, want to make a set of rules and basic methods,
> then develop a program that can, when given input, determine what
> methods to apply and apply them; and, depending on the rules, if it can
> generate a new method that would give a more desirable outcome.
> Basically, I want to make a program that will have the ability to
> reprogram/build on it self.

It sounds great but I always remember hearing somewhere that
self-modifying code was terrible. I cant remember why, maybe it's the
debugging thats terribly hard.

Anyway, don't let me discourage you, it sounds like fun :)

Matt

Roger Pack

1/9/2009 9:16:00 PM

0

>Basically, given a long list of methods belonging to a class, if you
>wanted ruby to apply methods based on the state of the program, how
>would you set it up besides doing:

I suppose you could use methods like
next_method = :method_name
instance.send next_method