Как найти имя прилагаемого исходного файла в Scala 2.11

Во время компиляции, как получить имя текущего исходного файла (где написано код) в scala 2.11?

3 ответа

В 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 =


Вот своего рода хакерский способ, который на самом деле делает трюк:

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

Источник: Как получить текущее script или имя класса в Scala?


Или вы можете использовать @li-haoyi отлично библиотека макросов исходного кода

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

Кроме того, многие другие лакомства, такие как номер строки, имена переменных и т.д.

licensed under cc by-sa 3.0 with attribution.