Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 是否在运行时在方法类型参数化中提供结构类型?_Scala_Reflection_Structural Typing - Fatal编程技术网

Scala 是否在运行时在方法类型参数化中提供结构类型?

Scala 是否在运行时在方法类型参数化中提供结构类型?,scala,reflection,structural-typing,Scala,Reflection,Structural Typing,后续行动 假设我有密码 def bar(param: {def foo: Unit}*) = param.foreach(x => x.foo) 此函数使objectparam调用名为foo [编辑] 我想知道以下是否可能(有或没有思考) param在编译时是固定的,函数名(在本例中为foo)在运行时提供 param和函数名foo都是在运行时提供的 param在编译时是固定的,函数名、函数参数、值和返回类型在运行时提供 我意识到结构类型已经使用了反射。所以我的问题是Scala是否可以

后续行动

假设我有密码

def bar(param: {def foo: Unit}*) = param.foreach(x => x.foo)
此函数使object
param
调用名为
foo

[编辑]

我想知道以下是否可能(有或没有思考)

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

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

如果我理解你的问题:

  • 在编译时,编译器检查每个
    param
    是否确实有一个签名正确的方法
    foo
  • 在运行时,在下面使用反射来调用每个
    param

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

    问题是,如果我不知道要调用的函数的名称(在本例中为
    foo
    ),则(例如,请用户提供)。然后您不能依赖结构类型,因为第一步是在编译时(请参阅答案)。你应该只使用普通的旧反射。