На самом деле это работает так же, как и в Ruby 1.9!
define_method :m do |a = false|
end
Если вам нужна совместимость 1.8, но вам не обязательно закрывать для определения вашего метода, рассмотрите возможность использования class_eval
со строковым аргументом и регулярным вызовом def
:
class_eval <<-EVAL
def #{"m"}(a = false)
end
EVAL
В противном случае следуйте предложению в ветке, с которой Филипп связан. Пример:
define_method :m do |*args|
a = args.first
end