Редактировать
хорошо, отличная обратная связь, направила меня в правильном направлении. Вариант использования для вызова анонимного закрытия находится в слое маршрутизации Scalatra. У меня есть несколько маршрутов, сгруппированных по разным типам, в этом примере запросы, общие для команд:
class Router {
type TeamType <: _Controller with _Team
get("""(schedules|rosters|teamresults|teamstats)/\d{8}""".r) {
val clazz :: date = captures
val obj = (clazz match {
case "schedules" => new RosterController
case "rosters" => new ScheduleController
}).asInstanceOf[TeamType]
obj.show(date)
}
}
Оборачивая выражение соответствия в самовозглашаемое анонимное закрытие, мы избегаем привязки «FooController.asInstanceOf [TeamType]» к каждому сопоставленному случаю и вместо этого выполняем приведение типа к возвращаемому экземпляру, поддерживая неизменность в процессе (т.е. не удалось "val obj = clazz match {...}" с последующим приведением типа, поскольку obj уже был val'd)
Я считаю, что это краткая форма, которую можно получить при создании экземпляров объекта на основе имени класса строки. Конечно, говоря об этом, вероятно, есть подход FP, который делает работу с еще большей краткостью ...
Во всяком случае, классные вещи, не хватало анонимных закрытий в Groovy, и теперь я обнаружил, что в Scala это тоже есть; -)
Оригинал
Не уверен, как осуществить это в Scala. В Groovy вы можете определить и вызвать анонимное закрытие следующим образом:
{String s-> println(s) }("hello")
Что такое эквивалент в Scala? Кроме того, вместо того, чтобы возвращать Unit, как можно указать тип возвращаемого значения?
Спасибо