Получение имени параметра из функции scala - PullRequest
3 голосов
/ 30 января 2011
trait PublicApi{ 

  def sayHi(from:String,content:String) 

} 

Я знаю, что в java невозможно получить "from" и "content" во время выполнения, но может ли манифест scala помочь мне здесь ??как определение

trait PublicApi{ 

  def sayHi(from:String,content:String)(m:Manifest) 

} 

вызов m.methodErasure.getArgumentName (0) вернул бы "из"

Ответы [ 2 ]

8 голосов
/ 30 января 2011

В своей текущей реализации ClassManifest полностью соответствует типизации и ничего не будет знать о именах параметров.
Если только вы:

  • добавить метаданные для имен параметров во время компиляции
  • или используйте урезанную версию ASM (среда манипулирования и анализа байт-кода Java) для извлечения отладочной информации из класса во время выполнения

, как и paranamer (как упоминается в комментариях Monkey ), у вас не будет никакой информации об имени параметра (по крайней мере, до этого) Java 8.0, хотя она была изначально упомянута для Java6! : предложение все еще находится в стадии разработки)

7 голосов
/ 30 января 2011

"Подпись" Scala DOES содержит эти имена параметров, как вы правильно поняли. В конце концов, они должны храниться где-то для работы именованных параметров / параметров по умолчанию. Вы также можете использовать скальп для просмотра этих имен.

Не стесняйтесь взглянуть на мои предварительные работы по библиотеке отражений .

Это незавершенная работа, и я не даю абсолютно никаких гарантий относительно текущего набора функций или правильности, но может дать вам некоторое представление о том, что происходит - вы можете даже использовать его для извлечения имен параметров в его текущем государство. Я тоже активно работаю над этим, так что с течением времени вы можете ожидать, что он улучшится ...

...