At compile time, how to retrieve the name of the current source file (where the code is written) in scala 2.11?
In the REPL, the name is console, but this shows that a position knows its source.
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>
Mshnik
Here's a kinda hacky way that actually does the trick:
val srcFile = new Exception().getStackTrace.head.getFileName
println(srcFile)
Source: How do I get the current script or class name in Scala?
Or, you can use @li-haoyi's excellent 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'"
Plus, many other goodies like line number, variables names, etc.
来源:https://stackoverflow.com/questions/30306827/how-to-find-the-name-of-the-enclosing-source-file-in-scala-2-11