Scala: не удается удалить список из кавычек [scala.collection.immutable.HashMap [String, Double]] - PullRequest
0 голосов
/ 23 октября 2018

Я использую Scala отражение и набор инструментов для оценки динамической функции в виде строки.И я пытаюсь оценить это с данными типа List[HashMap[String, Double]]

Но это дает ошибку

Can't unquote List[scala.collection.immutable.HashMap[String,Double]], consider 
using ...
val dataAfterFunctionApplied = tb.eval(q"$functionSymbol.function($data)")

Код, который я использую, как показано ниже.

package test

import scala.collection
import scala.collection.immutable.HashMap
import scala.reflect.runtime.universe.{Quasiquote, runtimeMirror}
import scala.tools.reflect.ToolBox

object ReflectionTest {
  def main(args: Array[String]): Unit = {
    val mirror = runtimeMirror(getClass.getClassLoader)
    val tb = ToolBox(mirror).mkToolBox()

    val data = List(
      HashMap("a" -> 1.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0),
      HashMap("a" -> 1.0, "b" -> 2678.0, "c" -> 40.0, "d" -> 2.0),
      HashMap("a" -> 4.0, "b" -> 267.0, "c" -> 26.0, "d" -> 2.0),
      HashMap("a" -> 1.0, "b" -> 2678.0, "c" -> 90.0, "d" -> 17.0)
    )

    println("Data before function applied on it")
    println(data.mkString(","))

    val function = "def function(result: List[HashMap[String, Double]])={result.map(x=>(x('a'.toString)+x('b'.toString)))}"

    val functionWrapper = "object FunctionWrapper { " + function + "}"
    val functionSymbol=tb.define(tb.parse(functionWrapper).asInstanceOf[tb.u.ImplDef])

    val dataAfterFunctionApplied = tb.eval(q"$functionSymbol.function($data)")

    println("Data after function applied on it")
  }
}

Если я использую Map (тип данных) вместо HashMap, то это работает, но время, затрачиваемое на анализ и оценку, слишком велико.Итак, я пытаюсь сделать это с HashMap.

Но, к сожалению, получаю эту ошибку.

Работает с картой, ничего страшного.Но проблема производительности наступает из-за разбора набора инструментов и оценки от строки к коду.Любой эффективный способ разобрать строку в коде в Scala ??

...