最近,我(终于)开始使用 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
仍然存在。