我正在尝试同时学习 Scala 和 Play Framework。在我看来,Scala 有很多非常酷的想法,但我的挫败感之一是试图理解方法/函数/lambdas/匿名函数/等的所有不同语法。
所以我有我的主应用程序 Controller ,如下所示:
object Application extends Controller {
def index = Action {
Ok(views.html.index("Your new application is ready."))
}
}
这告诉我我有一个单例
Application
有一种方法,index
,那返回什么类型?我期待 index
有一个更像的定义:def index(req: Request) : Result = { ... }
查看 Play Framework 的文档,它看起来好像
Action
是一种将请求转换为结果的特征,因为我很难理解这条线在说什么:def index = Action { ... }
我来自Java背景,所以我不知道这是在说什么? (这句话感觉像是在说“method index = [some interface Action]”,这对我来说没有意义;似乎正在发生一些美好的事情,但对我来说它是魔法,我对我的代码中的魔法感到不安;))
最佳答案
当您像调用函数一样调用对象时,它会转换为对 apply
的调用。 . IE。:
foo(bar)
被翻译成
foo.apply(bar)
所以,在
index
里面您正在调用Action
对象就好像它是一个函数,这意味着您实际上是在调用 Action.apply
.index
的返回类型被省略,因为编译器可以推断它是 Action.apply
的返回类型(我猜从名字是 Unit
)。
关于function - Scala 方法 = trait { ... } 含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963318/