Scala中的[A]是什么?

时间:2014-10-20 04:54:34

标签: scala

我在playframework site中看到了[A]。我发现[T]表示任何类型[S]表示子类型。但我无法找到[A]的内容。有趣的是,它在函数名称(logging)之后使用。

import play.api.mvc._

def logging[A](action: Action[A])= Action.async(action.parser) { request =>
  Logger.info("Calling action")
  action(request)
}

那么,[A]在Scala中意味着什么?

3 个答案:

答案 0 :(得分:4)

括号内的A只是任意类型参数占位符。它可能是B,C,无论你想真正使用它。使用T并不特别指“类型”而S并不具体指“子类型” - 这恰好是在某些库中使用的约定。

通常你可以使用一个字母作为备忘录,就特定类型参数的含义而言,例如,M可能用于Monoids,Monads等等......这是很常见的...

答案 1 :(得分:2)

您可以在Scala中为泛型类型选择任何名称。所以A这里只是泛型类型的名称。它可能是logging[T]

有关详细信息,请参阅Scala generic ClassesTwitter Scala School

顺便说一下,请注意,为了使函数(或方法)通用,您必须将泛型类型放在函数名后面的括号中:

def myFunc[T](someStuff: T): Boolean = ....

def myFunc[T](someString: String): T = ....

答案 2 :(得分:-1)

这只是一种文化差异。 Java社区使用T而Scala社区使用A,出于同样的原因,在相同的情况下。