作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有兴趣阅读 Grails 中的新注释,理论上它应该提供运行时性能改进,同时仍然允许动态调度,但它似乎没有效果。我错过了什么?
class MyService {
@GrailsTypeChecked // or @GrailsCompileStatic
def doSomething() {
String name = missingVariable
}
}
grails> clean
| Application cleaned.
grails> compile
| Compiling 1 source files.....
一切都可以编译,但在运行时会崩溃?我一定错过了一些东西,因为我真的不明白这些新注释是如何工作的。编译器如何能够确定什么是错误调用以及什么是可以忽略的错误调用(即动态查找器)?
我使用的是 Grails 2.5.0
最佳答案
该代码不应编译。我构建了一个简单的应用程序并将您的代码直接粘贴到该应用程序中,但该代码无法为我编译。请参阅https://github.com/jeffbrown/grailscompilestatic .
| Compiling 8 source files
[groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
[groovyc] /Users/jeff/t/grailscompilestatic/grails- app/services/demo/MyService.groovy: 9: [Static type checking] - The variable [missingVariable] is undeclared.
[groovyc] @ line 9, column 19.
[groovyc] String name = missingVariable
[groovyc] ^
[groovyc]
| Compiling 8 source files.
| Error Compilation error: startup failed:
/Users/jeff/t/grailscompilestatic/grails-app/services/demo/MyService.groovy: 9: [Static type checking] - The variable [missingVariable] is undeclared.
@ line 9, column 19.
String name = missingVariable
^
1 error
How will the compiler be able to work out what is a bad call and what is a bad call that can be ignored (i.e. a dynamic finder)?
我们有与类型检查器协作的类型检查扩展,因此当类型检查器认为它看到无效代码时,我们的扩展就会参与,并且如果扩展可以识别出它是动态调用,则扩展有机会将调用转换为动态调用类似于动态查找器,它不能静态分派(dispatch),但实际上在运行时有效。
关于grails - 如何使用@GrailsTypeChecked和@GrailsCompileStatic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29371578/
我是一名优秀的程序员,十分优秀!