vir*_*yes 3 closures scala anonymous invoke
编辑
确定,这里的反馈非常好,让我指出了正确的方向.用于调用匿名闭包的用例位于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)
}
}
Run Code Online (Sandbox Code Playgroud)
通过将匹配表达式包装在一个自调用的匿名闭包中,我们避免在每个匹配的情况下添加"FooController.asInstanceOf [TeamType]",而是在返回的实例上执行类型转换,在过程中保持不变性(即不能" val obj = clazz match {...}"后跟类型cast as obj已经被val'd了)
我相信这是在基于字符串类名创建对象实例时可以获得的短格式.当然,这样说,可能有一种FP方法可以更加简洁地完成工作......
无论如何,很酷的东西,从Groovy缺少匿名闭包,现在我发现Scala也包括在内;-)
原始
不知道如何在Scala中解决这个问题.在Groovy中,您可以定义和调用匿名闭包,如下所示:
{String s-> println(s) }("hello")
Run Code Online (Sandbox Code Playgroud)
Scala中的等价物是什么?而且,如何指定返回类型而不是返回Unit?
谢谢
((s : String) => println(s))("hello")
Run Code Online (Sandbox Code Playgroud)
至于返回类型,让Scala推断它.
scala> ((x : Int) => x < 4)(3)
res0: Boolean = true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
541 次 |
| 最近记录: |