这里是我的建议(如果我有你的逻辑是正确的):
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