大写第一个字母,咖喱定义的命名约定?

时间:2012-10-26 23:17:52

标签: scala currying

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

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

Scala中的约定是使用大写的第一个字母来定义可以用{ ... }调用的定义因为curryfication?或者它只是Play2的选择?

我在谈论LoggingAction和Action。

1 个答案:

答案 0 :(得分:2)

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

Action按惯例大写,因为它是类和伴随对象的名称。这可能在上下文中并不明显,因为看起来Action被称为函数,但真正发生的是更微妙的。由于Action随播广告对象定义了apply方法,

Action(arg)

被视为

的简写
Action.apply(arg)

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

Action apply { request =>
   // ...
}
另一方面,

LoggingAction方法。大写方法名称​​不常规,可能会混淆API的用户。但是,在这种情况下它可能是合适的,因为它在整个API中创建了一致性。通常,此类用法的目的是明确表示调用是创建某些事物(此处为日志记录操作)而不是正在执行一些东西。一个粗略的经验法则是大写字母表示名词,而小写表示动词