可以通过__LINE__Ruby或Perl 获取当前行号.例如:
print "filename: #{__FILE__}, line: #{__LINE__}"
Run Code Online (Sandbox Code Playgroud)
Groovy中是否有相同的功能?
不能直接获取,但您可以通过异常(或可抛出)堆栈跟踪来获取它。例如:
StackTraceElement getStackFrame(String debugMethodName) {
def ignorePackages = [
'sun.',
'java.lang',
'org.codehaus',
'groovy.lang'
]
StackTraceElement frame = null
Throwable t = new Throwable()
t.stackTrace.eachWithIndex { StackTraceElement stElement, int index ->
if (stElement.methodName.contains(debugMethodName)) {
int callerIndex = index + 1
while (t.stackTrace[callerIndex].isNativeMethod() ||
ignorePackages.any { String packageName ->
t.stackTrace[callerIndex].className.startsWith(packageName)
}) {
callerIndex++
}
frame = t.stackTrace[callerIndex]
return
}
}
frame
}
int getLineNumber() {
getStackFrame('getLineNumber')?.lineNumber ?: -1
}
String getFileName() {
getStackFrame('getFileName')?.fileName
}
String getMethodName() {
getStackFrame('getMethodName')?.methodName
}
def foo() {
println "looking at $fileName:$lineNumber ($methodName)"
}
foo()
// ==> looking at test.groovy:39 (foo)
Run Code Online (Sandbox Code Playgroud)
但请注意:获取行号、文件名或这样的方法非常慢。
| 归档时间: |
|
| 查看次数: |
1438 次 |
| 最近记录: |