7
A
回答
6
val ops = Map("+" -> ((_: Int) + (_: Int)), "-" -> ((_: Int) - (_:Int)))
或
val ops = Map[String, (Int, Int) => Int]("+" -> (_+_), "-" -> (_-_))
或甚至,對於實際鑽營,
val ops = Map("+" -> ((_: Int) + (_: Int)).curried, "-" -> ((_: Int) - (_:Int)).curried)
這些功能都結合Int
。那麼,Scala並不是一個無點的編程語言,它是一個面向對象的編程語言,並且沒有所有數字類型共有的超類。無論如何,如果你反對,那麼你就會遇到一個完全不同的問題,這個問題在堆棧溢出(Stack Overflow)中被多次詢問和回答(實際上,這是我的第一個Scala問題,iirc)。
11
如果您想要對功能進行咖喱,下面可能是最簡潔的方法。
scala> val ops: Map[String, Int => Int => Int] = Map(
| "+" -> (x => y => x + y),
| "-" -> (x => y => x - y)
|)
ops: Map[String,Int => Int => Int] = Map(+ -> <function1>, - -> <function1>)
此地圖然而僅限於Int
秒。如果你想要通用操作,你將不得不使用Numeric
上下文綁定。
scala> def ops[N : Numeric]: Map[String, N => N => N] = {
| import Numeric.Implicits._
| Map(
| "+" -> (x => y => x + y),
| "-" -> (x => y => x - y)
| )
| }
ops: [N](implicit evidence$1: Numeric[N])Map[String,N => N => N]
這種方法的一個重要的條件是,地圖被創建每次調用ops
時間。
相關問題
- 1. 斯卡拉,柯里和重載
- 2. 柯里在斯卡拉:多參數列表和回訪功能
- 3. <:<斯卡拉運算符
- 4. 斯卡拉綴/後綴運算符
- 5. 斯卡拉 - 前綴目運算符
- 6. 運行在斯卡拉
- 7. 斯卡拉在斯卡拉類
- 8. 火花斯卡拉運行
- 9. 斯卡拉@運營商
- 10. 在斯卡拉
- 11. 在斯卡拉
- 12. 在斯卡拉
- 13. 在斯卡拉
- 14. 在斯卡拉
- 15. 在斯卡拉
- 16. 在斯卡拉
- 17. 在斯卡拉
- 18. 在斯卡拉
- 19. 在斯卡拉
- 20. 在斯卡拉
- 21. 在斯卡拉
- 22. 在斯卡拉
- 23. 在斯卡拉
- 24. 在斯卡拉
- 25. 在斯卡拉
- 26. 在斯卡拉
- 27. 在斯卡拉
- 28. 在斯卡拉
- 29. 在斯卡拉
- 30. 在斯卡拉