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>
我不确定我做错了什么,但我的方法没有定义???
答案 0 :(得分:1)
在ruby中,定义方法更常见如下(使用输出作为示例:
def gimme_five
5
end
我相信您使用的语法来定义您的方法&#39;有效,但它正在做的是创建&#39; lambdas&#39;而不是常规方法。 Lambdas和Procs构成了Ruby对函数式编程的支持,并且是代表代码块的特殊Ruby对象 - 将它们视为可以传递给其他对象的迷你捆绑方法。
所以是的,只是正常地定义方法并且应该没问题 - 你的irb REPL中的输出只是无缘无故地返回lambda - 就像你在irb中设置一个数组一样,你会得到该数组返回:
>> a = [5]
=> [5]