我试图重新绑定scala.math
中的一些函数,使它们接受和返回Float
对象而不是Double
对象,以便我可以将它们绑定到一个函数注册器上,该注册器适用于接受和返回Float
对象的函数。我尝试了以下规则:
implicit def doubleFunc2floatFunc[T <: { def apply(x:Double):Double }] (func:T) = func(_:Float).floatValue
它不起作用。编译器抱怨我的函数是 (Double)=>Float
而不是 (Float)=>Float
。有人能指点我正确的方向吗?
编辑:我在使用的代码如下:
package org.nathanmoos.magnificalc.exprtreelib.functions
import org.nathanmoos.magnificalc.exprtreelib.Functions
import scala.math._
object InternalFunctions
{
implicit def float2double(x:Float) = x.doubleValue
// need an implicit def doubleFunc2floatFunc
implicit def double2float(x:Double) = x.floatValue
def csc(x:Float):Float = 1f/sin(x)
def sec(x:Float):Float = 1f/cos(x)
def cot(x:Float):Float = 1f/tan(x)
def registerAll() = {
Functions.register("ln", log _)
Functions.register("log", log10 _)
Functions.register("sqrt", sqrt _)
Functions.register("sin", sin _)
Functions.register("cos", cos _)
Functions.register("tan", tan _)
Functions.register("csc", csc _)
Functions.register("sec", sec _)
Functions.register("cot", cot _)
Functions.register("sinh", sinh _)
Functions.register("cosh", cosh _)
Functions.register("tanh", tanh _)
Functions.register("acos", acos _)
Functions.register("asin", asin _)
Functions.register("atan", atan _)
}
}
Functions.register
接受一个函数名称的 String
和一个与之关联的函数对象。
Functions.register
的类型签名是什么?我猜错误发生在对它的调用上,对吗? - Daniel C. SobralFunctions.register
定义如下:def register(name:String, func:(Float)=>Float)
。 - Nathan Moos