How to specify method default argument using define_method?

ruby

Solution

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

Problem

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

Original source