Я реализую приложение на основе акторов в Scala и пытаюсь передавать функции между акторами, чтобы они обрабатывались только тогда, когда актер получает какое-то сообщение.
import actors.Actor
import java.util.Random
import scala.Numeric._
import Implicits._
class Constant(val n:Number) extends Actor{
def act(){
loop{
receive{
case "value" => reply( {n} )
}
}
}
}
class Arithmetic[T: Numeric](A: ()=>T, B: ()=>T) extends Actor{
def act(){
receive{
case "sum" => reply ( A() + B() )
/* case "mul" => reply ( A * B )
*/
}
}
}
object Main extends App{
val c5 = new Constant(5)
c5.start
val a = new Arithmetic({c5 !! "value"}, {c5!!"value"} )
a.start
println(a!?"sum")
println(a!?"mul")
}
В приведенном выше примере кода я ожидаю, что результат будет 5 + 5 и 5 * 5. Проблема в том, что ответ не является типизированной функцией, и поэтому я не могу заставить оператор (+, *) работать с результатом из A и B.
Можете ли вы помочь с разработкой / внедрением такой системы?
Редактировать: Код обновлен, чтобы лучше отражать проблему. Ошибка в:
ошибка: не удалось найти неявное значение для параметра улик типа Numeric [Any]
val a = новая арифметика ({c5 !! "значение"}, {c5 !! "значение"})
Мне нужно быть в состоянии передать функцию, которая будет оцениваться в актере, всякий раз, когда я ее вызываю. В этом примере используются статические значения, но я буду использовать динамические значения в будущем, поэтому передача значения не решит проблему. Кроме того, я хотел бы получить различные типы переменных (Int / Long / Double) и при этом иметь возможность использовать один и тот же код.