這裏是我的建議(如果我有你的邏輯是正確的):
import scala.collection.mutable.Buffer
// Implementation.
trait StringConverter[T] {
def convert(string: String): Option[T]
}
def foo[T](m: Map[String,Buffer[String]], k: String)
(implicit converter: StringConverter[T]): List[T] =
for {
lookupFromMap <- m.get(k).toList
valueFromList <- lookupFromMap.toList
convertedValueFromList <- converter.convert(valueFromList).toList
} yield convertedValueFromList
// Instance.
implicit val intConverter: StringConverter[Int] = new StringConverter[Int] {
def convert(string: String): Option[Int] = Some(string.length)
}
val map = Map("one" -> Buffer("1", "11"), "two" -> Buffer("2", "222222222"))
println(foo[Int](map, "one"))
println(foo[Int](map, "two"))
println(foo[Int](map, "three"))
我已經分離成兩個主要部分,一個是基礎一般執行,另一個是一個實例正在使用它。由於原來的convert方法本身並不起作用,所以convert方法已經被轉換成帶有StringConverter特徵的類型類型的使用風格。
除此之外,主要的變化就是一切轉換到一個列表中的理解:
- 首先我們把從不用彷徨調用列表中的選項。
- 然後緩衝區變成一個列表。
- 轉換結果轉換爲列表。
其實解釋你想達到什麼可能會有一些幫助... – 2013-02-10 10:23:27
也許將其命名爲'bar'? – 2013-02-10 10:29:10