我有一个继承自具有beforeInterceptor的类的控制器. 这是我的基类. class FooBase { def beforeInterceptor = [action: {parentInterceptor()}] def parentInterceptor() { render("Snarge") }} 这是控制器的版本不起作用.
这是我的基类.
class FooBase { def beforeInterceptor = [action: {parentInterceptor()}] def parentInterceptor() { render("Snarge") } }
这是控制器的版本不起作用.
class BrokenController extends FooBase { def beforeInterceptor = [action: {childInterceptor()}] def childInterceptor() { super.beforeInterceptor.action.call() render("Bar") } def index = { render("Foo") } }
这是一个有效的版本
class WorkingController extends FooBase { def beforeInterceptor = { super.beforeInterceptor.action.call() render("Bar") } def index = { render("Foo") } }
当我在WorkingController上调用index时,我得到输出SnargeBarFoo.当我在BrokenController上调用index时,我得到一个IllegalAccessError
我想我有一个有效的版本,所以我的问题更多的是关于这里发生了什么?为什么一个版本可以从子类访问父类,但另一个版本不能?
我正在寻找的用例是能够使用具有除功能的拦截器功能.这需要能够在使用地图实现拦截器时链接拦截器.
两者之间有区别this.
和
this.&
以下代码有效 – 检查第三行:
class BrokenController extends FooBase { def beforeInterceptor = [action: {this&childInterceptor()}] def childInterceptor() { super.beforeInterceptor.action.call() render("Bar") } def index = { render("Foo") } }
该文件说明了以下内容.&
Method Reference .& Get a reference to a method, can be useful for creating closures from methods
所以我不确定,但我想它调用了该方法的作用域.或许系统会创建某种辅助类,以便执行一个闭包,导致该类没有super.beforeInterceptor方法.