2011-10-06 3 views
0

Последующая деятельность по итогам this SO question.Поставка Структурный тип при параметризации типа метода во время выполнения?

Предположим, у меня есть код

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

Эта функция вызывает объект param для вызова метода с именем foo

[EDIT]

Мне было интересно, если следующий (с отражением или без отражения)

  • param фиксируется во время компиляции, имя функции (в данном случае foo) подается во время выполнения
  • как param и имя функции foo поставляются во время выполнения
  • param фиксируется во время компиляции , имя функции, параметры функции, значения и типы возврата поставляются во время выполнения.

Я понимаю Структурная типизация уже использует отражение. Поэтому мой вопрос заключается в том, может ли Scala позаботиться об этом или если я явно использую отражение в своем коде. Я думаю, что для третьего требуется отражение, для которого я могу использовать библиотеку ASM.

ответ

1

Если я правильно понял ваш вопрос:

  1. Во время компиляции, компилятор проверяет, что каждый param действительно метод foo с правильной подписью.
  2. Во время выполнения отражения используется внизу, чтобы вызвать метод foo каждого param

Так что вам не нужно использовать отражение себя, но вы должны держать его в голове, что отражение будет использоваться во время выполнения, и может потенциально снизить производительность.

+0

Вопрос заключается в том, что если я не знал имя функции (в данном случае 'foo'), которое вызывается (например, попросите пользователя ее предоставить). – Jus12

+1

Тогда вы не можете полагаться на структурную типизацию, так как первый шаг во время компиляции (см. Ответ). Вы должны использовать простое отражение. – paradigmatic

 Смежные вопросы

  • Нет связанных вопросов^_^