Во время компиляции, как получить имя текущего исходного файла (где написано код) в scala 2.11?Как найти имя прилагаемого исходного файла в Scala 2.11
ответ
В РЕПЛ, название консоль, но это показывает, что позиция знает его источник.
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>
'c.macroApplication.pos.source.file.name' –
Вот любопытный Hacky так, что на самом деле делает трюк:
val srcFile = new Exception().getStackTrace.head.getFileName
println(srcFile)
Источник: How do I get the current script or class name in Scala?
+1 для прагматического решения. Можно ли полагаться на эту информацию? - Я имею в виду, что, если вы отключите отладочную информацию во время компиляции? – Madoc
Или, вы можете использовать @ литий-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'"
Кроме того, многие другие лакомства, как номер строки, имена переменных и т.д.
- 1. редактирование прилагаемого исходного файла в java
- 2. Scala script в 2.11
- 3. Как найти источник неисправного прилагаемого файла
- 4. Как найти имя исходного файла из исполняемого файла?
- 5. scala - получить имя класса/исходного файла и позицию символа
- 6. имя прилагаемого изображения (wordpress)
- 7. Compile Spark для Scala 2.11
- 8. Как найти имя переменной/полей из исходного файла java?
- 9. Обновление прилагаемого файла ресурсов
- 10. Как обновить имя исходного файла в Talend
- 11. Использование Java 8 в Scala 2.11
- 12. имя исходного файла не работает
- 13. Scala.xml будет устранен с Scala 2.11?
- 14. Рекомендуемая замена LinkedList в Scala 2.11+
- 15. Обход предупреждений об устаревании в Scala 2.11
- 16. Исчерпывающая проверка соответствия шаблонов в Scala 2.11
- 17. Scala CLOSURES имя файла
- 18. scala-pickling в POJO в scala 2.11 - Это действительно просто?
- 19. windbg: как получить имя исходного файла символа?
- 20. Получить имя файла текущего файла в scala
- 21. получить время изменения прилагаемого файла
- 22. Включая имя исходного файла в файле readfile?
- 23. Получить имя исходного файла гиперссылки в php
- 24. Создайте JAR из одного исходного файла Scala
- 25. Scalatest бросает странную ошибку на scala 2.11
- 26. Спарк IndexedRDD для Scala 2.11.x
- 27. Искра от scala 2.10.4 до 2.11
- 28. совместимость пакетов между Scala 2.10 и 2.11
- 29. Scala 2.11 LinkedList устарел, что мне использовать?
- 30. Снизьте Scala от 2.12 до 2.11.x
Зачем вам это нужно? Скажем, у вас есть макрос, который будет вставлять эту строку туда, где вы хотите, она будет в файле .class. Оценивать имя один раз на sturtup в Синглтон не убийца производительности. –
Несомненно, но поскольку эта информация явно доступна компилятору, и она является постоянной, кажется более «правильным» получить ее с помощью макроса. По-прежнему можно использовать это: http://stackoverflow.com/a/21893197/1670894, но, по-видимому, оно устарело с помощью scala 2.11. –
Вам нужен объект класса с именем 'CompilationUnit'. Я использовал его в плагинах компилятора, но не помню, как его получить, или даже если можно получить его из макроса. (возможно == легко. Вы можете отнести объекты в их внутреннее представление компилятора, очень раздражающую задачу, которая заставила отказаться от написания нескольких интересных макросов). – pedrofurla