0

このSOの質問へのフォローアップ。

コードがあるとします

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

この関数により、オブジェクトparamは次の名前のメソッドを呼び出します。foo

[編集]

以下が可能かどうか疑問に思っていました(反射の有無にかかわらず)

  • paramはコンパイル時に固定され、関数の名前 (この場合fooは ) は実行時に提供されます。
  • 両方paramと関数の名前がfoo実行時に提供されます
  • paramコンパイル時に固定され、関数の名前、関数のパラメーター、値、および戻り値の型は実行時に提供されます。

構造型付けはすでにリフレクションを使用していることに気付きました。だから私の質問は、Scala がそれを処理できるかどうか、またはコードで明示的にリフレクションを使用しているかどうかです。3 つ目は、 ASMライブラリを使用できるリフレクションが必要だと思います。

4

1 に答える 1

1

あなたの質問を理解できたら:

  1. コンパイル時に、コンパイラはそれぞれが正しい署名を持つparamメソッドを持っていることを確認します。foo
  2. foo実行時に、それぞれのメソッドを呼び出すために下でリフレクションが使用されます。param

したがって、自分でリフレクションを使用する必要はありませんが、実行時にリフレクションが使用されるため、パフォーマンスが低下する可能性があることに注意してください。

于 2011-10-06T11:40:39.403 に答える