如何推荐Lambda?

Chu*_*ulo 3 java lambda java-8

如果我需要递归使用,我怎样才能从内部引用LambdamyLambda

myLambda -> {expression}
//           ^^^^^^^^^^ how can I refer to myLambda here?
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

如果你的意思是你要引用您定义的lambda表达式是lambda表达式,我不相信有任何这样的机制.我知道一些有用的情况 - 递归定义,基本上 - 但我不相信它是支持的.

您无法在Java中捕获非最终变量这一事实使得这更加困难.例如:

// This doesn't compile because fib might not be initialized
Function<Integer, Integer> fib = n ->
      n == 0 ? 0
      : n == 1 ? 1
      : fib.apply(n - 1) + fib.apply(n - 2);
Run Code Online (Sandbox Code Playgroud)

和:

// This doesn't compile because fib is non-final
Function<Integer, Integer> fib = null;
fib = n ->
      n == 0 ? 0
      : n == 1 ? 1
      : fib.apply(n - 1) + fib.apply(n - 2);
Run Code Online (Sandbox Code Playgroud)

一个Y型组合子将有助于在这里,但我没有能拿出在Java中的例子,现在:(

  • 也许可以帮助您举例:http://rosettacode.org/wiki/Y_combinator#Java (3认同)