除了在JVM上与动态语言集成之外,还有像Scala这样的静态类型语言中Dynamic类型的其他强大用途是什么?
eiv*_*ndw 22
我想动态类型可用于实现JRuby,Groovy或其他动态JVM语言中的一些功能,如动态元编程和method_missing.
例如,创建类似于Rails中的Active Record的动态查询,其中带有参数的方法名称在后台转换为SQL查询.这是在Ruby中使用method_missing功能.这样的事情(理论上 - 没有试图实现这样的事情):
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
}
}
Run Code Online (Sandbox Code Playgroud)
允许这样的用法,你可以调用方法'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")
Run Code Online (Sandbox Code Playgroud)
如果要添加动态元编程,则需要动态类型以允许调用在运行时添加的方法.