从scala函数获取参数名称

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)将返回“from”     
已邀请:
正如你所推测的那样,Scala“签名”包含这些参数名称。毕竟,它们必须存储在某处才能使命名/默认参数起作用。您还可以使用scalap查看这些名称。 请随意查看我在反射库上的初步工作。 这是一项正在进行的工作,我绝对不能保证当前的功能集或正确性,但可能会让您了解所涉及的内容 - 您甚至可以使用它来提取当前状态的参数名称。这也是我正在积极研究的东西,所以随着时间的推移,你可以期待它的改进......     
在当前的实现中,
ClassManifest
都是关于类型的具体化,并且对参数名称一无所知。 除非你: 在编译时添加参数名称的元数据 或者使用ASM的缩减版本(Java字节码操作和分析框架)在运行时从类中提取调试信息 ,正如paranamer所做的那样(如评论中的Monkey提及),你将不会获得有关参数名称的任何信息(至少在Java 8.0之前没有,即使它最初是为Java6提到的!:提案仍在进行中)     

要回复问题请先登录注册