Я полагаю, что динамический тип мог бы использоваться для реализации некоторых функций, обнаруженных в JRuby, Groovy или других динамических языках JVM, таких как динамическое метапрограммирование и method_missing.
Например, создание динамического запроса, подобного Active Record в Rails, где имя метода с параметрами транслируется в SQL-запрос в фоновом режиме. Это использует функцию method_missing в Ruby. Как-то так (по идее - не пытались реализовать что-то подобное):
class Person(val id: Int) extends Dynamic {
def _select_(name: String) = {
val sql = "select " + name + " from Person where id = " id;
// run sql and return result
}
def _invoke_(name: String)(args: Any*) = {
val Pattern = "(findBy[a-zA-Z])".r
val sql = name match {
case Pattern(col) => "select * from Person where " + col + "='" args(0) + "'"
case ...
}
// run sql and return result
}
}
Разрешение на использование, подобное этому, при котором вы можете вызывать методы 'name' и 'findByName' без их явного определения в классе Person:
val person = new Person(1)
// select name from Person where id = 1
val name = person.name
// select * from Person where name = 'Bob'
val person2 = person.findByName("Bob")
Если необходимо добавить динамическое метапрограммирование, тип Dynamic необходим для разрешения вызова методов, которые были добавлены во время выполнения.