0

在 Play2 文档中,我发现如下内容:

def LoggingAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  Action { request =>
    Logger.info("Calling action")
    f(request)
  }
}

{ ... }由于 curryfication可以调用的定义使用大写首字母是 Scala的惯例吗?还是只是 Play2 的选择?

我说的是 LoggingAction 和 Action。

4

1 回答 1

2

首先,正如@pedrofurla 在他的评论中指出的那样,currying 与你在这里看到的无关。其次,虽然从 API 用户的角度来看LoggingActionAction行为相似,但区分它们很重要。

Action按约定大写,因为它是类的名称和伴随对象。这在上下文中可能并不明显,因为它看起来Action像函数一样被调用,但真正发生的事情更加微妙。由于Action伴随对象定义了一个apply方法,

Action(arg)

被视为简写

Action.apply(arg)

也就是说,看起来像函数调用的东西实际上只是对Action对象apply方法的调用。在这种情况下,方法将单个函数作为参数,通常使用大括号:

Action apply { request =>
   // ...
}

LoggingAction,另一方面,是一种方法。大写的方法名称不是传统的,可能会混淆 API 的用户。但是,在这种情况下它可能是合适的,因为它在整个 API 中创建了一致性。一般来说,这种用法的目的是明确调用是在创建一些东西(这里是一个日志记录操作),而不是在做一些事情。粗略的经验法则是,大写字母表示名词,而小写字母表示动词

于 2012-10-26T23:44:49.343 回答