簡體   English   中英

Scala的特征和方法參數

[英]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

斯卡拉的其他多態性是;

  1. 參數多態-https: //stackoverflow.com/a/21115651/432903
  2. 臨時多態性-http: //blog.jaceklaskowski.pl/2015/05/15/ad-hoc-polymorphism-in-scala-with-type-classes.html

你可以學習coursera類周3(數據和抽象)的概念- https://www.coursera.org/learn/progfun1/home/week/3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM