从scala函数获取参数名称

lai*_*lly 3 parameters scala manifest

trait PublicApi{ 

  def sayHi(from:String,content:String) 

} 
Run Code Online (Sandbox Code Playgroud)

我知道在java中不可能在运行时获取"from"和"content",但scala manifest可以帮助我吗?喜欢定义

trait PublicApi{ 

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

} 
Run Code Online (Sandbox Code Playgroud)

调用m.methodErasure.getArgumentName(0)将返回"from"

Von*_*onC 8

在它当前的实现中,ClassManifest所有关于类型的具体化,并且对参数名称一无所知.
除非你:

  • 在编译时添加参数名称的元数据
  • 或者使用ASM的缩减版本(Java字节码操作和分析框架)在运行时从类中提取调试信息

,正如paranamer所做的那样(如评论中的Monkey提及),你将不会有任何关于参数名称的信息(至少在Java 8.0之前没有,即使它最初是为Java6提到的!:提案仍在进行中)


Kev*_*ght 7

斯卡拉"签名" DOES包含这些参数的名字,因为你正确地猜测.毕竟,它们必须存储在某处才能使命名/默认参数起作用.您还可以使用scalap查看这些名称.

请随意查看我在反射库初步工作.

这是一项正在进行的工作,我绝对不能保证当前的功能集或正确性,但可能会让您了解所涉及的内容 - 您甚至可以使用它来提取当前状态的参数名称.这也是我正在积极努力的事情,所以随着时间的推移,你可以期待它的改善......