As I understand the question now, I think the answer from Phrogz is
spot on. You need to use the method_missing method, which will catch
any call to a method you haven't defined:
class Flower
def jasmine
puts "iam jasmine"
end
def rose
puts "iam rose"
end
def method_missing meth, *args, &blk
puts "method #{meth} called, but not defined"
end
end
flowerlist=Flower.new #----->Creating instance for flower
flowerlist.jasmine #------->"gives output as "iam jasmine"
flowerlist.rose # =======> "gives output as "i am rose"
flowerlist.lotus #=> "method lotus called, but not defined"
So, now you know where you have a place to do whatever you want to do
with a call to a method that doesn't exist. For example, if you want
to dynamically create a method that returns its name as a string, you
can do:
def method_missing method, *args, &blk
self.class.send(:define_method, method) do
method.to_s
end
send(method)
end
This will dynamically define (and call) a method that returns its name
as a string. So if you add that to the Flower class:
class Flower
def method_missing method, *args, &blk
self.class.send(:define_method, method) do
method.to_s
end
send(method)
end
end
f = Flower.new
f.lotus #=> "lotus"
f.rose #=> "rose"
and so on. In any case, I recommend looking at Phrogz's answer,
because it's a nice little utility to automatically define method that
do different things depending the the name patterns.
Regards,
Jesus.
···
On Mon, Jun 14, 2010 at 7:23 AM, Sateesh Kambhamapati <sateesh.mca09@gmail.com> wrote:
Jesús Gabriel y Galán wrote:
On Thu, Jun 10, 2010 at 11:53 AM, Sateesh Kambhamapati >> <sateesh.mca09@gmail.com> wrote:
end
end
f=flower.new
f.rose-------------------->It gives me rose
but now f.jasmine------------------->It calls method_missing
but i want it comes to my class "Flower"
I'm not sure if I understand you correctly, but if you want those
method missing calls, to be called on the Flower class, you can do
this:
irb(main):001:0> class Flower
irb(main):002:1> def self.jasmine
irb(main):003:2> "jasmine"
irb(main):004:2> end
irb(main):005:1> def method_missing meth, *args, &blk
irb(main):006:2> self.class.send meth, *args, &blk
irb(main):007:2> end
irb(main):008:1> end
=> nil
irb(main):016:0> Flower.new.jasmine
=> "jasmine"
So i Want to know which methods are invoked by my "Flower" object
I don't understand this question.
Jesus.
Thanks for reply
i would like to know which methods are called by class object i.e
class Flower
def jasmine
puts "iam jasmine"
end
def rose
puts "iam rose"
end
end
flowerlist=Flower.new #----->Creating instance for flower
flowerlist.jasmine #------->"gives output as "iam jasmine"
flowerlist.rose # =======> "gives output as "i am rose"
flowerlist.lotus #------->"Shows No Method Error"
Question : --> My Question is i would like to know which methods are
called by object i.e flowerlist in the class Flower
if i already know those methods then
suppose if i have not define some method then i will define it
dynamically example here is "lotus"
i think u understand my question