define_method可用于定义方法:

define_method(:m) do |a|
end

这相当于:

def m(a)
end

然而,用define_method表示的下列等价形式是什么:

def m(a=false)
end

Note that I'd need to be able to call 100 without giving any argument.

推荐答案

这实际上就像你在Ruby 1.9中所期望的那样!

define_method :m do |a = false|
end

如果需要1.8个兼容性,但不一定需要一个闭包来定义方法,请考虑使用class_eval的字符串参数和def的常规调用:

class_eval <<-EVAL
  def #{"m"}(a = false)
  end
EVAL

否则,请遵循philippe链接的帖子中的建议.例子:

define_method :m do |*args|
  a = args.first
end

Ruby相关问答推荐

有没有更好的方法来加入剩余不变的子列表?

将数组转换为哈希,其中键是索引

将ruby数组转换为连续对数组

用反斜杠单引号替换单引号

卸载所有 gem Ruby 2.0.0

Ruby 2 中的命名参数

从 1 开始循环

Ruby注入初始为哈希

如何在 RSpec 2 中自动加载 spec_helper.rb

将Elastic search限制设置为无限制

测试变量是否等于两个值之一

很好地格式化输出到控制台,指定选项卡的数量

Lisp 和 Erlang 原子、Ruby 和 Scheme 符号.它们有多大用处?

如何在 Ruby 中向异常消息中添加信息?

Ruby 疯狂:类与对象?

等号 ('=') 放在方法定义中的方法名称之后有什么作用?

正则表达式中的 `?i` 和 `?-i` 是什么意思?

更好的 ruby​​ markdown 解释器?

将浮点数舍入到Ruby中最接近的整数

什么是 Ruby 1.9 标准 CSV 库?