如何在Scala 2.11中查找封闭源文件的名称

时间:2015-05-18 15:10:51

标签: scala scala-2.11

在编译时,如何在scala 2.11中检索当前源文件的名称(编写代码的位置)?

3 个答案:

答案 0 :(得分:5)

这是一种实际上有诀窍的黑客方式:

val srcFile = new Exception().getStackTrace.head.getFileName
println(srcFile)

来源:How do I get the current script or class name in Scala?

答案 1 :(得分:4)

在REPL中,名称是控制台,但这表明位置知道其来源。

scala> import scala.language.experimental.macros
import scala.language.experimental.macros

scala> import scala.reflect.macros.whitebox.Context
import scala.reflect.macros.whitebox.Context

scala> def f(c: Context): c.Tree = { import c._,universe._ ; Literal(Constant(c.enclosingPosition.source.file.name)) }
f: (c: scala.reflect.macros.whitebox.Context)c.Tree

scala> def g: String = macro f
defined term macro g: String

scala> g
res0: String = <console>

答案 2 :(得分:1)

或者,您可以使用@ li-haoyi的优秀sourcecode macro library

def foo(arg: String)(implicit file: sourcecode.File) = {
  println(s"this file is: '${file.getAbsolutePath}'")
}

foo("hello") // "this file is '/path/to/file'"

另外,许多其他好东西,如行号,变量名称等。