例如,我有以下的是串接beginings和結局產生級聯的所有可能的變體結果函數:這種奇怪的類型[T *]
def mixer1(begin: String, beginings: String*)(end: String, endings: String*) =
for (b <- (begin +: beginings); e <- (end +: endings)) yield (b + e)
其實什麼功能呢是不是impotant,我想重寫它是這樣的:
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
}
}
顯然,第二個是行不通的預期,因爲申請的第二個參數的類型是序列[字符串]而不是字符串*(howewer他們都編譯成序列[字符串]):
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功能?
只想了很短的時間,我認爲這應該是實際工作。你可以問#scala或者看看你是否在bug追蹤器中發現了這個問題。 – soc 2010-11-25 11:29:45