Вы предполагаете, что приоритет оператора будет работать, называя вещи так, как вы хотите, и это не сработает.Самый быстрый способ, с помощью которого я могу придумать эту работу, - это сводник, как предложил @Dave Griffith:
case class Num(value: Double)
object Main {
implicit def toDouble(v: Num) = v.value
implicit def toNum(v: Double) = Num(v)
def main(args: Array[String]) {
val one = Num(1)
val two = Num(2)
val three = Num(3)
val result: Num = three + one * two
println(result)
}
}
Более того, вы не можете сделать это во время выполнения.Как вы ожидаете сделать вызов функции, чье имя не существует во время компиляции?то есть Num.+plus
где Num
не имеет +plus
метода?Компилятор скажет вам заблудиться.И, как уже было сказано, +plus
в любом случае недействителен.
РЕДАКТИРОВАТЬ : я сегодня снова смотрел на это, и я не уверен, что я курил.Гораздо лучше Сутенер это:
class NumMath(u: Num) {
def +(v: Num) = Num(u.value + v.value)
def *(v: Num) = Num(u.value * v.value)
}
object Num {
implicit def toNumMath(v: Num) = new NumMath(v)
}
case class Num(value: Double)
object Main {
import Num._
def main(args: Array[String]) {
val one = Num(1)
val two = Num(2)
val three = Num(3)
val result = three + one * two
println(result)
}
}