在运行时提供方法类型参数化的结构类型?

时间:2011-10-06 11:17:22

标签: scala reflection structural-typing

this SO question.

的后续行动

假设我有代码

def bar(param: {def foo: Unit}*) = param.foreach(x => x.foo)

此函数使对象param调用名为foo

的方法

[编辑]

我想知道以下是否可行(有或没有反思)

  • param在编译时修复,函数名称(在本例中为foo)在运行时提供
  • param和函数foo的名称在运行时提供
  • param在编译时修复,函数名称,函数参数,值和返回类型在运行时提供。

我意识到结构类型已经使用了反射。所以我的问题是Scala是否可以处理它,或者我是否在代码中明确使用了反射。我认为第3个需要反射,我可以使用ASM库。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题:

  1. 在编译时,编译器会检查每个param是否确实存在具有正确签名的方法foo
  2. 在运行时,底部使用反射来调用每个foo的方法param
  3. 所以你不需要自己使用反射,但你应该记住反射将在运行时使用,并可能会降低性能。