Scala 中的通用数字范围函数

问题描述 投票:0回答:1

我在 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 ,这违背了目的。

scala types range
1个回答
0
投票

我可以建议使用隐式转换来解决问题

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)
© www.soinside.com 2019 - 2024. All rights reserved.