尝试定义方法时出现Ruby错误

时间:2015-04-30 02:24:43

标签: ruby lambda

irb(main):001:0> class Fixnum
irb(main):002:1> define_method(:gimme_five) do
irb(main):003:2* 5
irb(main):004:2> end
irb(main):005:1> end
=> #<Proc:0x007ff4ed01cd10@(irb):2 (lambda)>
irb(main):006:0> class String
irb(main):007:1> define_method(:scramble) do
irb(main):008:2* new_string = self.reverse()
irb(main):009:2> new_string = new_string.upcase()
irb(main):010:2> new_string
irb(main):011:2> end
irb(main):012:1> end
=> #<Proc:0x007ff4ed02d868@(irb):7 (lambda)>
irb(main):013:0> 

我不确定我做错了什么,但我的方法没有定义???

1 个答案:

答案 0 :(得分:1)

在ruby中,定义方法更常见如下(使用输出作为示例:

def gimme_five
  5
end

我相信您使用的语法来定义您的方法&#39;有效,但它正在做的是创建&#39; lambdas&#39;而不是常规方法。 Lambdas和Procs构成了Ruby对函数式编程的支持,并且是代表代码块的特殊Ruby对象 - 将它们视为可以传递给其他对象的迷你捆绑方法。

所以是的,只是正常地定义方法并且应该没问题 - 你的irb REPL中的输出只是无缘无故地返回lambda - 就像你在irb中设置一个数组一样,你会得到该数组返回:

>> a = [5]
=> [5]