Using a method as input to another method


#1

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
.
.
.
etc.

Thank you for any help with this:)

If ruby can’t do this, are there any languages languages that can treat
methods as objects?


#2

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/State_pattern

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


#3

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 K. 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/State_pattern

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


#4

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 :slight_smile:

Matt


#5

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