Например, у меня есть следующая функция, которая объединяет начала и окончания, производя в результате все возможные варианты объединения:
def mixer1(begin: String, beginings: String*)(end: String, endings: String*) =
for (b <- (begin +: beginings); e <- (end +: endings)) yield (b + e)
На самом деле то, что делает функция, не имеет значения, я хочу переписать ее следующим образом:
def mixer2(begin: String, beginings: String*):Function2[String, Seq[String], Seq[String]] = {
return new Function2[String, Seq[String], Seq[String]] {
def apply(end:String, endings:Seq[String]) = for(b <- (begin +: beginings); e <- (end +: endings)) yield b+e
}
}
Очевидно, что второй не будет работать должным образом, потому что второй параметр apply имеет тип Seq [String], но не String * (как они оба компилируются в Seq [String]):
scala> mixer1("a","b")("c","d")
res0: Seq[java.lang.String] = ArrayBuffer(ac, ad, bc, bd)
scala> mixer2("a","b")("c","d")
<console>:10: error: type mismatch;
found : java.lang.String("d")
required: Seq[String]
mixer2("a","b")("c","d")
Как я могу (если смогу) переопределить функцию mixer2?