function - Scala 方法 = trait { ... } 含义

标签 function scala methods lambda traits

我正在尝试同时学习 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/

相关文章:

python - 在polyfit-python中包含sigma

function - 返回堆栈上的指针

scala - 将环境变量添加到 application.conf 时遇到问题

scala - 如何过滤包含元组数组的rdd?

Java - 如何在不返回他所期望的情况下退出方法?

java - boolean setter 错误输出

java - 调用方法时出现问题(扫雷)

php - 如何将表单输入值传递给php函数

c++ - 我的功能中缺少什么吗?

scala - sbt 着色两个版本的依赖