6
A
回答
6
是沒有形狀可以做很多!
import shapeless._
import syntax.std.tuple._
trait basicOption extends Poly1 {
implicit def default[T] = at[T](t => Some(t))
}
object fullOption extends basicOption {
implicit def caseSome[T] = at[Some[T]](s => s)
implicit def caseNone = at[None.type](s => s)
}
println((Some(1),2,Some(3)).map(fullOption)) // (Some(1),Some(2),Some(3))
println((Some(1),2,None).map(fullOption)) // (Some(1), Some(2), None)
更多的例子,你可以檢查自己的github repo
這是無形的2.0及以上,如果使用的是較舊的版本,你仍然可以做,但不是在元組調用map
直接,你將有通過HList
。
7
是的,
scala> import shapeless._, syntax.std.tuple._
import shapeless._
import syntax.std.tuple._
scala> :paste
// Entering paste mode (ctrl-D to finish)
object opt extends opt0 {
implicit def optId[T <: Option[_]] = at[T](identity)
}
trait opt0 extends Poly1 {
implicit def default[T] = at[T](Option(_))
}
// Exiting paste mode, now interpreting.
defined object opt
defined trait opt0
scala> (Some(1), 2, Some(3)) map opt
res0: (Some[Int], Option[Int], Some[Int]) = (Some(1),Some(2),Some(3))
你會發現,在第一和最後一個位置Some[Int]
的都被保存下來,而取消中間元素的類型爲Option[Int]
。我的假設是你真正意圖是這樣的工作,
scala> (Option(1), 2, Option(3)) map opt
res1: (Option[Int], Option[Int], Option[Int]) = (Some(1),Some(2),Some(3))
+0
啊+1'T <:選項[ _]'比我醜陋的解決方案更漂亮:-) –
相關問題
- 1. 地圖JSON條目來選擇選項
- 2. 帶選擇選項的圖像地圖
- 3. 使用jquery validate插件來:必須選擇一些選擇框選項值
- 4. 在選擇(形式)選項
- 5. 如何忽略有條件地選擇一些選項?
- 6. 提供一個選項/日期選擇器來選擇一週
- 7. HTML選擇選項來選擇
- 8. 選擇多隻允許一個選擇某些選項
- 9. jquery添加一個選項來選擇
- 10. javascript附加一個選項來選擇
- 11. 如何啓用形式選項選擇基於第一選擇
- 12. 選擇選項基地
- 13. 選擇選項 - 無法獲取選項
- 14. 如何添加一個選擇全部選項來選擇CDE
- 15. Javascript來選擇選擇列表的第一個選項
- 16. 如何用另一個選項的選項來填充選擇
- 17. 圖形選擇框
- 18. 選項中,無法選擇
- 19. 無法選擇YES選項
- 20. 試圖給用戶一個選項來選擇劊子手
- 21. 試圖選擇一個選項與jQuery
- 22. jquery選擇最近的選擇框來添加選擇選項
- 23. 無法在Dropbox的選擇2選擇第一個選項
- 24. Watin無法從選擇列表中選擇一個選項
- 25. 的圖標,當選擇地圖無法
- 26. 在選擇菜單中設置一些選項「不可選」
- 27. 水豚給「試圖選擇禁用選項:-1」選擇一個選項
- 28. 保持一些選擇的選項以下事先提交形式
- 29. 用d3製作增強本地地圖的一些選項
- 30. 傳遞查詢字符串來形成選擇選項
好答案,你打我(和@travisbrown)把它:-) –