尝试从lambda重构为方法引用我意识到方法引用似乎没有得到调用者的局部变量(词法范围?)。当使用lambda作为其内联代码时,根本没有问题。
$scope.names=[];
$scope.articles=[];
$scope.whatever=[];
我理解这个方法的参数列表不会产生任何“appender”但是没有“隐藏”参数我可以用来访问调用者/消费者范围的词汇变量吗?
答案 0 :(得分:2)
不,这是不可能的。
在编译期间解决词法范围。该方法以通用方式编写,可以从任何地方进行技术调用。因此,编译器无法猜测所有潜在调用的词法范围。
如果要保持单独的方法,唯一的方法是将调用包装为包装lambda并将局部变量作为参数传递。但我认为这不是原始目标。
答案 1 :(得分:1)
不,您无法创建一个可以访问方法之外的局部变量的常规方法。
保留局部变量副本的lambdas名称是 closure 。
我知道在Java中使用闭包的另一种方式是匿名内部类。