Хорошо известно, что структурные типы реализуются посредством отражения. Есть ли какие-либо другие языковые конструкции, которые используют отражение?
Какие функции Scala реализованы внутренне с использованием отражения?
Ответ 1
Это тесно связано со структурными типами, но любой экземпляр анонимного объекта, т.е.
new { def print = ("hello world") }.print
будет использовать отражение.
http://scala-programming-language.1934581.n4.nabble.com/Structural-types-reflection-td3071599.html
Ответ 2
Перечисления используют отражение, чтобы узнать обо всех возможных значениях для перечисления для функции nameOf
. (См. Метод populateNameMap
в Enumeration.scala). Это делается один раз, при первом вызове nameOf
для определенного типа Enumeration
.
Ответ 3
Если вы считаете isInstanceOf/asInstanceOf как отражение, то сопоставление шаблонов зависит от них
Ответ 4
Вызов метода в структурных типах зависит от отражения:
type T = { def startsWith(x:String):Boolean }
def doSomethingWith(x:T) = x.startsWith("abc")
doSomethingWith("abcdef")
Ответ 5
Интерпретатор Scala очень сильно использует отражение.
Ответ 6
Это не языковая конструкция, но ScalaTest включает Suite.execute
, который использует отражение для поиска и вызова методов тестирования.
Использует ли Scala соответствие шаблону любое отражение за кулисами?