Ruby Add a pointer in a lambda to point to current lambda.

zw963 · 2014年06月01日 · 最后由 zw963 回复于 2014年06月03日 · 1644 次阅读

e.g. named this pointer as this.

def fibonacci
  memo = [0, 1]
  ->(n) { memo[n] ||= this.call(n-1) + this.call(n-2) }
end

fibonacci.call(100) # => 354224848179261915075

instead of:

def fibonacci
  memo = [0, 1]
  feb  = ->(n) { memo[n] ||= feb.call(n-1) + feb.call(n-2) }
  feb
end

fib.call(100) # => 354224848179261915075
1 楼 已删除

#1 楼 @zw963 那个不是本人

@luikore 啊,师傅你在线。

怎么没看到你上 Gtalk ... : (

good tip :plus1:

很早以前就觉得应该弄成这样了。。

#5 楼 @Tony612 #6 楼 @iBachue

这是我第一次将 lambda 用作递归用途,还是参考 js 才发现这个用法的,还是蛮有趣的。

不过,改写成一个类的方式来实现,也许更加符合大众的口味。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号