From: Ryan Davis Date: 2010-10-06T11:53:29+09:00 Subject: Re: How to call a method within another method On Oct 5, 2010, at 15:22 , Jeremy Bopp wrote: > On 10/5/2010 5:00 PM, Paul Roche wrote: >> Hi, I have a method... >> >> def make_pay_loan >> >> end >> >> I want this method to 'activate' (for want of a better word) another >> method called pay_loan. >> >> Any tips on how this could be done are welcome, thanks > > I think you want to dynamically define one method from within another. > Try this: > > def make_pay_loan > def pay_loan > puts 'paid' > end > end But there is nothing dynamic about that solution. All you're doing is defining a def expression inside of another which will get defined the first time (and every time for that matter) make_pay_loan gets called. pay_loan is entirely static and has no ability to be dynamic in any way. You'll want to use define_method or eval in order to actually be dynamic. % echo "def make_pay_loan > def pay_loan > puts 'paid' > end > end > " | parse_tree_show s(:defn, :make_pay_loan, s(:args), s(:scope, s(:block, s(:defn, :pay_loan, s(:args), s(:scope, s(:block, s(:call, nil, :puts, s(:arglist, s(:str, "paid"))))))))) Depending on how the OP means "activate", it could be as simple as calling public on the method to make it visible, or as complex as defining a dynamic method with define_method and using the closure to capture the dynamic values passed in to make_pay_loan.