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. 提供一個選項/日期選擇器來選擇一週
- 4. 選擇多隻允許一個選擇某些選項
- 5. jquery添加一個選項來選擇
- 6. Javascript來選擇選擇列表的第一個選項
- 7. 如何添加一個選擇全部選項來選擇CDE
- 8. 如何用另一個選項的選項來填充選擇
- 9. 無法選擇YES選項
- 10. 試圖選擇一個選項與jQuery
- 11. Watin無法從選擇列表中選擇一個選項
- 12. 無法在Dropbox的選擇2選擇第一個選項
- 13. 傳遞查詢字符串來形成選擇選項
- 14. PHP +形式中選擇選項
- 15. Grails的形式選擇選項
- 16. jquery ajax轉換形式選擇選項
- 17. 形式EMPTY選擇選項PHP
- 18. jQuery的谷歌地圖的地方 - 獲取選擇選項
- 19. 顯示一個選擇選項基於其他選擇選項
- 20. 如何根據另一選擇選項禁用選擇選項
- 21. jQuery的形式選擇選項無法在Chrome
- 22. 使用Javascript - 形式選擇框語法選擇的選項
- 23. 選擇以HTML形式的動態選擇的選項
- 24. 如何取消選擇選擇選項框的一些計算完成
- 25. 從下拉菜單中選擇顏色選項更新地圖多邊形和地圖圖例?
- 26. 重置一個選擇框圖形
- 27. 禁用Visual Studio 2010中的某些選項時,選擇了一個選項
- 28. 的選擇/選項jQuery選擇:選擇
- 29. 使用dropwdownlist來選擇選項
- 30. 如何設置選項來選擇框
好答案,你打我(和@travisbrown)把它:-) –