在Play2文档中,我发现如下内容:
def LoggingAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
Action { request =>
Logger.info("Calling action")
f(request)
}
}
Scala中的约定是使用大写的第一个字母来定义可以用{ ... }
调用的定义因为curryfication?或者它只是Play2的选择?
我在谈论LoggingAction和Action。
答案 0 :(得分:2)
首先,正如@pedrofurla在评论中指出的那样,currying与你在这里所看到的无关。其次,虽然LoggingAction
和Action
从API用户的角度来看表现相似,但区分它们很重要。
Action
按惯例大写,因为它是类和伴随对象的名称。这可能在上下文中并不明显,因为看起来Action
被称为函数,但真正发生的是更微妙的。由于Action
随播广告对象定义了apply
方法,
Action(arg)
被视为
的简写Action.apply(arg)
也就是说,看起来像函数调用的东西实际上只是对Action
对象的apply
方法的调用。在这种情况下,方法将单个函数作为参数,通常使用大括号:
Action apply { request =>
// ...
}
另一方面, LoggingAction
是方法。大写方法名称不常规,可能会混淆API的用户。但是,在这种情况下它可能是合适的,因为它在整个API中创建了一致性。通常,此类用法的目的是明确表示调用是创建某些事物(此处为日志记录操作)而不是正在执行一些东西。一个粗略的经验法则是大写字母表示名词,而小写表示动词。