2015-09-10 67 views
0

鑑於一些情況下類Foo(x: Int)Bar(x: Int),一個(隱含的)功能f1即轉換Foo => Bar是有可能實現以下目標:是否可以提供從Iterable [T]到Iterable [U]的隱式轉換?

val foos: List[Foo] = List(Foo(1), Foo(2)) 
def myFunction(bar: List[Bar]) = ??? 

myFunction(foos) // Here foos should be implicitly converted from List[Foo] to List[Bar] 
+0

有關編寫隱函數從可迭代[T]轉換成什麼Iterable [U]使用隱式函數'f1'? – JoseM

回答

1

也許這樣的事情是你在找什麼?

scala> case class Foo(x: Int) {} 
defined class Foo 

scala> case class Bar(y: Int) {} 
defined class Bar 

scala> import scala.language.implicitConversions 
import scala.language.implicitConversions 

scala> implicit def f2b(foos: List[Foo]): List[Bar] = foos.map(foo => new Bar(foo.x)) 
f2b: (foos: List[Foo])List[Bar] 

scala> def barIt(bs: List[Bar]): Unit = bs.foreach(bar => println(bar.y)) 
barIt: (bs: List[Bar])Unit 

scala> val foos = List(new Foo(59), new Foo(2), new Foo(99)) 
foos: List[Foo] = List(Foo(59), Foo(2), Foo(99)) 

scala> barIt(foos) 
59 
2 
99 
2

鑑於從FooBar隱式轉換,下面將給出列表一個簡單的隱式轉換:

implicit def foos2bars(foos: List[Foo]): List[Bar] = foos.map(f => f:Bar) 
相關問題