如何将类型绑定到我的Scala Interpreter?

时间:2018-04-10 19:32:21

标签: scala reflection interpreter scala-reflect scala-compiler

我正在尝试使用外部库中的类型将值绑定到解释器中。

这就是我目前宣布翻译的方式:

val interpreter = new IMain({
    val settings = new Settings
    settings.usejavacp.value = true
    settings.deprecation.value = true
    settings.embeddedDefaults[IMessage]
    settings.embeddedDefaults[IChannel]
    settings.embeddedDefaults[IGuild]
    settings.embeddedDefaults[IUser]
    settings
})
// Variable bindings
interpreter.bind("message", "IMessage", event.getMessage)
interpreter.bind("guild", "IGuild", event.getGuild)
interpreter.bind("user", "IUser", event.getAuthor)
interpreter.bind("channel", "IChannel", event.getChannel)

interpreter.interpret(code)

然而,当我执行我的代码时,我在运行时收到此错误:

<console>:5: error: not found: type IMessage
         var value: IMessage = _
                    ^
<console>:6: error: not found: type IMessage
         def set(x: _root_.scala.Any) = value = x.asInstanceOf[IMessage]
                                                               ^
<console>:5: error: not found: type IGuild
         var value: IGuild = _
                    ^
<console>:6: error: not found: type IGuild
         def set(x: _root_.scala.Any) = value = x.asInstanceOf[IGuild]
                                                               ^
...

我也试图将我声明的对象包含在解释器的范围内,我不确定如何做到这一点。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

我认为你的翻译对这个图书馆一无所知。所以你需要一种方法来导入它。实际上这个问题已经是answered

答案 1 :(得分:0)

请尝试使用完整的限定词路径,例如

interpreter.bind("message", "com.abc.xyz.IMessage", event.getMessage)