define_method
could be used to define methods:
define_method(:m) do |a|
end
which is equivalent to the following:
def m(a)
end
However, what is the equivalent form of the following using define_method
:
def m(a=false)
end
Note that I'd need to be able to call m()
without giving any argument.
This actually just works like you would expect in Ruby 1.9!
define_method :m do |a = false|
end
If you need 1.8 compatibility, but you don't necessarily need a closure to define your method with, consider using class_eval
with a string argument and a regular call to def
:
class_eval <<-EVAL
def #{"m"}(a = false)
end
EVAL
Otherwise follow the suggestion in the thread that philippe linked to. Example:
define_method :m do |*args|
a = args.first
end
This is currently not possible due to the yacc parser. This thread on Ruby-forum proposes several solutions.
class A
define_method(:hello) do | name, *opt_greeting|
option = opt_greeting.first || Hash.new
greeting = option[:greeting] || "hello"
puts greeting+" "+name
end
end
a = A.new
a.hello "barbara"
a.hello "Mrs Jones", :greeting => "Good Morning"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With