Scala中的通用数值范围函数

gcxthw6b  于 5个月前  发布在  Scala
关注(0)|答案(1)|浏览(95)

我在scala中有两个函数,它们的功能和下面的一样:

private def getIntRange(minLimit: Int, maxLimit: Int, step: Int): Something = {
    (minLimit to maxLimit by step)
      .map(_.toString)
      .map(
        //something here
      )
      .toList
  }

字符串

private def getDoubleRange(minLimit: Double,
                                            maxLimit: Double,
                                            step: Double): Something = {
    (minLimit to maxLimit by step)
      .map(_.toString)
      .map(
        //same thing here 
        )
      )
      .toList
  }


我想将两者合并到一个函数中,该函数将接受int或double,并分别创建一个具有相同值的范围,int或double。
有没有什么方法可以做到这一点,而不需要两个单独的函数,采取不同的类型?
谢谢你,谢谢
我看到有[T : Numeric],但我需要将类型转换为double或int,这违背了目的。

weylhg0b

weylhg0b1#

我可以建议一些使用隐式转换到BigDecimal的解决方法:

import math.BigDecimal.double2bigDecimal
import scala.collection.immutable.NumericRange
import collection.immutable.Range.BigDecimal.bigDecAsIntegral

def getRangeX[A](minLimit: A,
                          maxLimit: A,
                          step: A)(implicit toDecimal: A => BigDecimal) = {
  NumericRange(toDecimal(minLimit), toDecimal(maxLimit), toDecimal(step)).toList
}

getRangeX(1, 10, 2)
getRangeX(1.0, 10.0, 2.0)

字符串

相关问题