2016-11-27 49 views
0

我一直在尋找一些Play Slick的例子來構建數據訪問層,發現CatDAO example中有下面一行有點耐人尋味:做什麼的目的是什麼:x.map {_ =>()}

def insert(cat: Cat): Future[Unit] = db.run(Cats += cat).map { _ =>() } 

,我不知道什麼是做.map { _ =>() }

UPDATE的目的:運行在斯卡拉解釋下面提供了一些線索,但仍爲什麼需要在插入上述方法是不完全清楚。

scala> val test = Seq(1, 2, 3) 
test: Seq[Int] = List(1, 2, 3) 

scala> test map { _ =>() } 
res0: Seq[Unit] = List((),(),()) 

回答

3

如果沒有映射db.run方法將返回的一定數量的被插入到數據庫中的記錄(返回類型將是Future[Int]然後)。然而,代碼的作者並不需要這個價值,他希望他的API返回Future[Unit]。這就是爲什麼他使用map,在這種情況下將Int映射到Unit()是代表Unit類型的值)。

+0

爲了清晰起見,可能會更清楚地做'.map {_ => Unit}'多打字嗎?或者? –

+1

不幸的是,這不會起到相同的作用,因爲'Unit'是一個類型,'()'是該類型的一個實例。所以你的映射會返回一個類型序列('Seq [Unit.type]'),而不是那個類型的實例序列('Seq [Unit]') –