我在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中意味着什么?
答案 0 :(得分:4)
括号内的A只是任意类型参数占位符。它可能是B,C,无论你想真正使用它。使用T并不特别指“类型”而S并不具体指“子类型” - 这恰好是在某些库中使用的约定。
通常你可以使用一个字母作为备忘录,就特定类型参数的含义而言,例如,M可能用于Monoids,Monads等等......这是很常见的...
答案 1 :(得分:2)
您可以在Scala中为泛型类型选择任何名称。所以A
这里只是泛型类型的名称。它可能是logging[T]
。
有关详细信息,请参阅Scala generic Classes和Twitter Scala School。
顺便说一下,请注意,为了使函数(或方法)通用,您必须将泛型类型放在函数名后面的括号中:
def myFunc[T](someStuff: T): Boolean = ....
或
def myFunc[T](someString: String): T = ....
答案 2 :(得分:-1)
这只是一种文化差异。 Java社区使用T
而Scala社区使用A
,出于同样的原因,在相同的情况下。