gpt4 book ai didi

scala - 调用匿名闭包

转载 作者:行者123 更新时间:2023-12-01 09:35:25 25 4
gpt4 key购买 nike

编辑
好的,这里有很好的反馈,让我指出了正确的方向。调用匿名闭包的用例在 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 已经被验证)

我相信这是在基于字符串类名创建对象实例时可以得到的最简短的形式。当然,话虽这么说,但很可能有一种 FP 方法可以更简洁地完成这项工作......

无论如何,很酷的东西,缺少来自 Groovy 的匿名闭包,现在我发现 Scala 也涵盖了这一点 ;-)

原创
不知道如何在 Scala 中实现这一点。在 Groovy 中,您可以像这样定义和调用匿名闭包:

{String s-> println(s) }("hello")

Scala 中的等价物是什么?另外,除了返回 Unit,如何指定返回类型?

谢谢

最佳答案

((s : String) => println(s))("hello")

至于返回类型,让Scala自己推断吧。

scala> ((x : Int) => x < 4)(3)
res0: Boolean = true

关于scala - 调用匿名闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com