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