【发布时间】:2012-08-13 08:12:15
【问题描述】:
def memoize
cache = {}
lambda { |*args|
unless cache.has_key?(args)
cache[args] = self[*args]
end
cache [args]
}
end
factorial = lambda {|x| return 1 if x== 0; x*factorial[x-1];}.memoize
puts factorial.call 10
代码来自《红宝石编程语言》一书。 但这让我很困惑:method(memoize) 如何将 lambda 作为它的方法应用? lambda 可以跟其他 lambda 以 dot(.) 作为自己的方法吗?
lambda {|x| return 1 if x== 0; x*factorial[x-1];}.memoize
顺便说一句:上面的代码在 irb 中工作,但是 ruby 解释器遇到如下错误:
memoize.rb:11: private method `memoize' called for #<Proc:0x0000000103bba018@memoize.rb:11> (NoMethodError)
为什么?
【问题讨论】: