【问题标题】:Supply Structural type in method type parameterization at runtime?在运行时方法类型参数化中提供结构类型?
【发布时间】:2011-10-06 11:17:22
【问题描述】:

跟进this SO question.

假设我有代码

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

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

[编辑]

我想知道以下是否可能(有或没有反射)

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

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

【问题讨论】:

    标签: scala reflection structural-typing


    【解决方案1】:

    如果我理解你的问题:

    1. 在编译时,编译器会检查每个param 确实有一个方法foo 具有正确的签名。
    2. 在运行时,在下面使用反射来调用每个param的方法foo

    因此您不需要自己使用反射,但您应该记住,反射将在运行时使用,并且可能会降低性能。

    【讨论】:

    • 问题是,如果我不知道要调用的函数的名称(在本例中为 foo)(例如,要求用户提供它)。
    • 那么你不能依赖结构类型,因为第一步是在编译时(见答案)。你应该只使用普通的反射。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多