Я только начал изучать scala и пытаюсь научиться себе, сделав простое приложение, dicebot.Использование признака Scala в качестве интерфейса обратного вызова
Это простое приложение, которое обрабатывает эту простую команду.
CommandRouter(). Запуска ("бросок костей 3D4")
package com.kwoolytech.kwoolybot
case class CommandRouter() {
def run(command: String): List[String] = {
val _command = command.split("\\s+").toList
commandArray.head match {
case "dice" => Dice.run(_command.tail)
case _ => List[]
}
}
}
package com.kwoolytech.kwoolybot
case class Dice() extends Bot {
def run(command: List[String]): List[String] = {
command.head match {
case "roll" => roll(_command.tail)
case _ => List[]
}
}
private def roll(command: Array[String]): List[String] = {
val rollCmdPattern = "([0-9]+)d([0-9]+)".r
command.head match {
case rollCmdPattern(numTry, diceSize) => rollDice(numTry, diceSize)
case _ => List[]
}
}
private def rollDice(numTry: Int, diceSize: Int): List[String] = {
(1 to numTry).map { x => scala.util.Random.nextInt(diceSize) + 1})
}.toList.map(_.toString)
}
BTW, в самой первой части приложения, я хочу передать через функцию обратного вызова, которая будет получать когда Dice Bot выполнил свою работу.
Dice.run (_command.tail, обратного вызова)
Дело в том, .. Я не совсем уверен, что переходить к обратного вызова параметра. Если бы это была Java, я определяю интерфейс, как показано ниже, но в scala, я не совсем уверен, что использовать.
interface KwoolyHttpCallback {
void onWeatherJsonDataReceived(String result);
void onWeatherBitmapDataReceived(Bitmap result);
}
private void initializeKwoolyHttpCallbackFunction() {
httpClientCallback = new KwoolyHttpCallback() {
@Override
public void onWeatherJsonDataReceived(String result) {
try {
dataModel.setWeatherJsonData(result);
queryWeatherBitmapData();
} catch (Exception e) {
Log.e(getClass().getName(), "Exception: ");
e.printStackTrace();
}
}
Я где-то слышал, что черта - это интерфейс, но я действительно не понимаю.
trait BotInterface {
def onReceiveResult(result: List[String]): List[String]
}
Не могли бы вы научить меня, как использовать эту черту в качестве интерфейса обратного вызова?
Заранее благодарен! :)
Эй, Юваль, я ценю за вашу помощь. Думаю, я понял. благодаря! – Harry