2014-10-20 70 views
0

我見過[A]playframework site。我發現[T]意味着任何類型, [S]是爲子類型。但我找不到[A]。有趣的是,它在函數名稱後面使用(logging)。Scala中的[A]是什麼?

import play.api.mvc._ 

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

那麼,在Scala中的含義是什麼?

+1

http://stackoverflow.com/questions/5354803/scala-type-parameter-bracket – MNie 2014-10-20 05:06:15

+0

像Java中的''。如果你不知道兩者,請閱讀「泛型」。 – Radian 2014-10-20 05:27:22

+1

「[S]用於子類型」 - 您從哪裏聽到的? – 2014-10-20 05:46:25

回答

2

您可以在Scala中爲通用類型選擇任何名稱。所以A這裏只是一個泛型類型的名稱。相反,它可能是logging[T]

欲瞭解更多信息,你可以參考Scala generic ClassesTwitter Scala School

順便說一句,請注意製造一個函數(或方法),一般你必須把泛型類型括號中的函數名後:

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

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

這只是一種文化差異。 Java社區使用T,而Scala社區使用A,出於同樣的原因,在相同的情況下。

+0

你的觀點是有效的。我的意思是通過閱讀Java標準庫代碼並將其與Scala標準庫代碼進行比較,您會發現Java中的'T'和Scala中的'A'都是。但我想從這個人不能得出這是一個文化差異。至少在Scala社區(以Play Play,Slick,Lift等爲例)中,您會發現泛型類型的不同名稱。所以我想提一下,這只是一個泛型類型的任意名稱,對於這個問題會更好。 – 2014-10-24 15:32:16

4

的括號內的A只是任意類型參數佔位符。無論你想使用什麼,它都可能是B,C。 T的使用並不特指「類型」,S並不特指「子類型」 - 這恰好是一些圖書館使用的慣例。

很多時候你可能會使用一個字母作爲備忘錄來表示一個特定的類型參數,例如M可能被用於像Monoid,Monads等類似的東西是很常見的......