繁体   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