Ruby lambda 的问题

logchi · 2014年03月06日 · 最后由 logchi 回复于 2014年03月07日 · 2043 次阅读

我在解决实际问题的时候,遇到了关于 lambda 的问题,不清楚 Ruby 中的 lambda 是否能像下面这样用。

  • lambda 的递归是像下面这样吗?
lambda_x = ->(x) {
  if x == 0
    return
  else
    puts "Some Operaions..."
    lambda_x[ x-1 ]
  end
}

lambda_x[10]
  • lambda 可以像方法那样接收其他的 lambda 作参数吗?
lambda_x = ->(x) {
  puts "Some Operations..."
}

base = 10
lambda_y = ->(another_lambda) {
  if base == 0
    return
  else
    puts 'Some Operations...'
    another_lambda[ base**2 ]
    base -= 1
    lambda_y[ another_lambda ]
  end
}

lambda_y[ lambda_x ]
  • 或者作为闭包直接引用另一个 lambda ?
lambda_x = ->(x) {
  puts "Some Operations..."
}

base = 10
lambda_y = ->{
  if base == 0
    return
  else
    puts 'Some Operations...'
    lambda_x[ base**2 ]
    base -= 1
    lambda_y.call
  end
}

lambda_y.call

可以像上面这样用吗?

能够运行 改变输出也能够确定程序符合预期

lambda 其实就是匿名函数。主要用在一些一次性或者不需要命名函数的地方或其他。这种取名应该能用,但既然都取名了,直接用 def 岂不是更清楚。

都可以这么用啊 楼主对 Lambda 有兴趣的话 看看人家是怎么玩的吧:http://youtu.be/FITJMJjASUs?t=6m52s

#2 楼 @billy 但方法受到了作用域的限制,看不见外面的变量,所以才想用实现闭包的 lambda。

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