Я пытаюсь повторно привязать некоторые функции в 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
для имени функции и объекта-функции, с которым она ассоциируется.