scala之旅-核心語言特性【多型方法】(二十九)
阿新 • • 發佈:2020-12-02
在Scala中,方法可以和值一樣可以被型別引數化。這樣寫的語法跟泛型很像。型別引數用中括號包著,值引數則是用小括號包著。
下面就是例子:
def listOfDuplicates[A](x: A, length: Int): List[A] = { if (length < 1) Nil else x :: listOfDuplicates(x, length - 1) } println(listOfDuplicates[Int](3, 4)) // List(3, 3, 3, 3) println(listOfDuplicates("La", 8)) // List(La, La, La, La, La, La, La, La)
該方法listOfDuplicates
採用型別引數A
和值引數x
以及length
。值x
是型別A
。如果length < 1
我們返回一個空列表。否則,我們x
將放在遞迴呼叫返回的重複項列表的前面。(請注意,這::
意味著將左側的元素新增到右側的列表之前。)
在第一個示例呼叫中,我們通過編寫顯式提供了type引數[Int]
。因此,第一個引數必須為Int
,返回型別為List[Int]
。
第二個示例呼叫顯示您不必總是顯式提供type引數。編譯器通常可以根據上下文或值引數的型別進行推斷。在此示例中,"La"
是,String
因此編譯器知道A
必須是String
。