最近,我(终于)开始使用 Scala 的 Numeric trait,这确实很神奇。例如:
def square[A](x: A)(implicit num: Numeric[A]): A = num.times(x, x)
现在,我可以对任何数字求平方,无论是Double、Integer、BigDecimal还是其他数字。但是,如果我想做一些更高级的数学怎么办?例如,我的数字逻辑函数Double如下所示:
def logisticFunction(x: Double): Double = 1.0 / (1.0 + math.exp(-x))
我可以轻松地进行加法和除法(我只需要使用 traitFractional而不是Numeric),但是指数呢?我当然不想编写自己的exp函数(或任何带参数的任意函数Double)。
所以,我的问题是:如何将我的转换A为Double,对此进行数学运算,然后转换回A. 甚至可能吗?
编辑:
这就是我的函数签名的样子:
def logisticFunction[A](x: A)(implicit num: Fractional[A]): A =
/* Magic happens here */
我已经弄清楚了关于转换为 double 的部分,这就像num.toDouble(x). 但是,转换回的问题A仍然存在。