Параметры и параметры метода в Scala

Jwan622 спросил: 12 мая 2018 в 04:19 в: 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?


1 ответ

prayagupd ответил: 12 мая 2018 в 05:05

Да, когда вы определяете вещи, которые имеют общую черту, это один вид полиморфизма, который просто называется полиморфизмом подтипов.

Пример,

scala> trait Compressor { def compress(data: String): String }
defined trait Compressorscala> class Zipper extends Compressor { def compress(data: String) = s"$data is zip compressed" }
defined class Zipperscala> 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)Stringscala> compress("i want to compress", new Zipper)
res1: String = i want to compress is zip compressed

Другой полиморфизм в scala:

  1. Параметрический полиморфизм - https ://stackoverflow.com/a/21115651/432903
  2. Ad-hoc Полиморфизм - http://blog.jaceklaskowski.pl/2015/05/15/ad-hoc-polymorphism- in-scala-with-type-classes.html

Вы можете изучать неделю 3 курса курдеров (данные и абстракция) для концепции - https://www.coursera.org/learn/progfun1 / главная / неделя / 3