Scala:在允许任何参数的同时强制特性返回某种类型的任何方法?

时间:2015-11-03 17:23:04

标签: scala

我有很多function LongestWord(sen) { var wordArray = sen.match(/\w+/gi); var longest = 0; var word = undefined; for(var i = 0; i < wordArray.length; i++){ if(wordArray[i].length > longest){ word = wordArray[i]; longest = word.length; } } return word; } 个函数必须都返回相同的类型,例如process。这些不同的函数都有不同的参数,但我需要结合它们的输出。那么有没有一种方法可以使用类型系统 - 可能是通过特征 - 来保证我的所有List[(String, Int)]函数都返回相同的类型?

E.g:

process

1 个答案:

答案 0 :(得分:6)

您可以使用参数化类型执行此操作。

// Input is a type variable. Could also be "A" or any other type identifier
trait Processor[Input] {
  def process(input: Input): List[(String, Int)]
}

// This defines Input = String for this class
object ProcessData1 extends Processor[String] {
  def process(input: String): List[(String, Int)] = ???
}

// Note the tupling
object ProcessData2 extends Processor[(Seq[String], Boolean)] {
  def process(rawInput: (Seq[String], Boolean)): List[(String, Int)] = {
    val (input, flag) = rawInput
    ???
  }
}

不幸的是,它们都必须具有相同的功能,但您可以通过将您希望拥有的参数组合来解决这个问题,如ProcessData2