[英]Traits and method parameters in Scala
在Scala中這叫什么? 這被認為是多態性嗎?
說我有一個像這樣的舊方法:
def close(pair: TradingPair, currentDate: LocalDate, startTime: Long): Unit = {
...
if (rowsWritten > 0) ZipWriter.compressAndDeleteOriginals(file)
else file.delete()
}
但我希望是這樣的:
def close(pair: TradingPair, currentDate: LocalDate, startTime: Long, writer: CompressionWriter): Unit = {
...
if (rowsWritten > 0) writer.compressAndDeleteOriginals(file)
}
因為我期望更多類型的壓縮編寫器。 是執行此操作的好方法:
trait CompressionWriter {...}
object ZipWriter extends CompressionWriter {...}
object GZipWriter extends CompressionWriter {...}
我可以在close
的方法參數中使用新特征的類型嗎?
這是Scala中的多態性嗎?
是的,當您定義具有共同特征的東西時,是一種多態性,簡稱為Subtype polymorphism 。
例,
scala> trait Compressor { def compress(data: String): String }
defined trait Compressor
scala> class Zipper extends Compressor { def compress(data: String) = s"$data is zip compressed" }
defined class Zipper
scala> class GZipper extends Compressor { def compress(data: String) = s"$data is gzip compressed" }
defined class GZipper
以特征為參數的方法,
scala> def compress (data: String, compressor: Compressor) = compressor.compress(data)
compress: (data: String, compressor: Compressor)String
scala> compress("i want to compress", new Zipper)
res1: String = i want to compress is zip compressed
斯卡拉的其他多態性是;
你可以學習coursera類周3(數據和抽象)的概念- https://www.coursera.org/learn/progfun1/home/week/3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.