scala.tools.nsc.Interpreter -- 如何执行解释器语句以便在全局范围内定义结果? (Scala 2.7.7final)

2024-07-04

我正在尝试在 Scala 中解释字符串来定义类和方法。我使用了来自的例子http://scala-programming-language.1934581.n4.nabble.com/Compiling-a-Scala-Snippet-at-run-time-td2000704.html http://scala-programming-language.1934581.n4.nabble.com/Compiling-a-Scala-Snippet-at-run-time-td2000704.html在下面的代码中:

import scala.tools.nsc.{Interpreter,Settings}
var i = new Interpreter(new Settings(str => println(str)))
i.interpret("class Test { def hello = \"Hello World\"}")

它有效,但不知何故,解释结果没有发生在全局命名空间中:

new Test # => <console>:5: error: not found: type Test

所以:如何执行解释器语句以便在全局范围内定义结果?我目前使用的是 scala2.7.7final,无法将解释器更改为 2.8。

感谢您的帮助

Matthias


我认为,当您从解释器迈向正在运行的应用程序时,您无法摆脱使用反射:

scala> var res = Array[AnyRef](null)
scala> i.bind("result", "Array[AnyRef]", res)
scala> i.interpret("result(0) = new Test")
scala> res
res11: Array[AnyRef] = Array(Test@2a871dcc)

您仍然可以获取类对象并实例化自己:

scala> i.interpret("result(0) = classOf[Test]")                            
scala> res(0).asInstanceOf[Class[_]].getConstructors()(0).newInstance()
res24: Any = Test@28bc917c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala.tools.nsc.Interpreter -- 如何执行解释器语句以便在全局范围内定义结果? (Scala 2.7.7final) 的相关文章

随机推荐

  • Swift:根据日期对获取的核心数据子实体进行排序

    介绍 我正在制作一个日历应用程序 在其中使用核心数据存储事件 其组成为 DateKey作为父级 具有一对多关系 CalendarEventModel 这个概念是DateKey包含 yyyy dd MM 日期字符串 当天发生的所有事件都作为子
  • 什么是无操作系统裸机 Cortex M3 的开源数据存储

    我正在寻找有关用 C 编写的数据存储的建议 该数据存储将在没有任何操作系统的情况下为 ARM Cortex M3 进行编译 我希望它是 用C写的 最好是免费和 或开源的 可以用GCC编译 适用于裸机处理器 无需操作系统或文件系统支持 可以是
  • 如何更改 PostgreSQL 中的“REFERENCES”?

    当表名更改时 如何更改对 PostgreSQL 中表的引用 假设我有 CREATE TABLE example1 id serial NOT NULL PRIMARY KEY name varchar 100 CREATE TABLE ex
  • pytest 中的分组测试:类与普通函数

    我正在使用 pytest 来测试我的应用程序 pytest 支持两种 据我所知 编写测试的方法 在课堂上 test feature py gt 类 TestFeature gt def test feature sanity 在函数中 te
  • Akka 2.0 RC2 中远程 Actor 部署出现错误

    我正在尝试创建一个 actor 并将其部署到我的计算机的端口 1997 如下所示 在application conf中 akka version 2 0 RC2 event handlers akka event Logging Defau
  • Worksheet_change 无法使用公式,而 Worksheet_Calculate 会出现编译错误

    我正在尝试使图表根据单元格中的特定值 阶段门 1 5 改变颜色 这是我的测试代码 Private Sub Worksheet Change ByVal Target As Range If Target Address M 2 Then I
  • 如何将十六进制字符串转换为普通文本字符串 C#

    我们有一个 keyMaterial 十六进制字符串 看起来像这样 453F1287225ED9971D389A35F8D1032E7748DD0B88302F7C6C194626D4C8659B000000000E8000000002000
  • 从 C++ 设置 OLE 请求超时

    我正在使用 CoCreateInstance 实例化本地 COM 服务器 有时 提供服务器的应用程序需要很长时间才能启动 发生这种情况时 Windows 会弹出一个对话框 如下所示 服务器繁忙 由于其他程序正忙 因此该操作无法完成 选择 切
  • HTTP 缓存标头设置 weblogic

    有谁知道如何修改 weblogic 设置以将 HTTP 缓存标头设置为遥远的未来日期 例如 在我当前的设置中 weblogic 将 http 缓存标头设置为在 5 小时后过期 作为 HTTP 1 1 304 Not Modified 的响应
  • .gitattributes 文件对于 git 真的有必要吗?

    我最近读了一些关于 gitattributes 的文章 也发现了像这样的地方 https github com alexkaratarakis gitattributes https github com alexkaratarakis g
  • 无法运行 com.android.ide.eclipse.adt.internal.build.AidlProcessor

    我从一位开发人员那里得到了一个项目 该项目已经完成并且在他的计算机上运行良好 当我尝试在 Eclipse 中在我的计算机上构建该项目时 我收到以下错误消息 无法运行 com android ide eclipse adt internal
  • Matplotlib 图例帮助

    我正在写一个脚本 其中包含几个要点 我也试图从这些点上创造一个传奇 总结我的脚本 我正在绘制几种 类型 的点 称为 a b c 这些点具有不同的颜色和形状 a go b rh c k 这是我的脚本相关部分的缩短版本 lbl the type
  • 如何查询我的 Subversion 存储库?

    目前 我只想找到过去 X 天内未修改的所有文件 但最终我希望能够对我的 subversion 存储库进行更复杂的查询 是否有我可以使用的某种 Subversion 查询语言或 API 您可以使用 SvnQuery 项目 http svnqu
  • Kotlin:在构造函数中初始化类属性

    我创建了一个带有类属性的 Kotlin 类 我想在构造函数中对其进行初始化 public class TestClass private var context Context null Nullable attribute public
  • 如何使用大量脚本文件管理 AngularJS 工作流程

    我研究了 gruntjs 但我不确定它是否是解决我的工作流程问题的正确工具 我正在开发一个巨大的 Angular 项目 其中已经有 30 多个 js 文件 每次添加新的 js 文件时 我都必须转到索引文件并在其中添加引用 有没有办法用 gr
  • 如何通过鼠标点击使一个对象移动并与另一个对象交换位置

    到目前为止 我有一个脚本 可以在单击鼠标时将对象移动一小段距离 但是我想更改它 以便当我单击该对象时 它会与旁边的另一个对象交换位置 而不仅仅是它所在的小距离现在搬家了 我对如何做到这一点有点困惑 因为我对统一很陌生 using Unity
  • 使用 ETag 进行 Volley 缓存

    我正在使用 Volley 库 但无法正确设置缓存 服务器向我发送 json 对象 过期时间和 ETag 我想将此对象保存在缓存中 并在下一个对该对象的请求中使用向服务器发送的请求 在标头中包含 ETag 如果响应为 304 Not Modi
  • 使用 Sublime Text 和正则表达式匹配行上的第一个空格

    所以正则表达式对我来说一直很困难 我试图找到一个正则表达式来选择一行上的第一个空格 这让我感到沮丧 那么我可以使用 sublime text 将其替换为 如果你能给出一个快速的解释 这将有助于 本着 edi 回答的精神 但对正在发生的事情进
  • 在挑选多个补丁时如何跳过一个补丁?

    我已经开始使用如下命令进行挑选 git cherry pick A B C D 假设补丁 A 和 B 有一些合并冲突 但我最终将它们全部修复并且git cherry pick continue 当我最终到达 C 时 我意识到一定已经应用了相
  • scala.tools.nsc.Interpreter -- 如何执行解释器语句以便在全局范围内定义结果? (Scala 2.7.7final)

    我正在尝试在 Scala 中解释字符串来定义类和方法 我使用了来自的例子http scala programming language 1934581 n4 nabble com Compiling a Scala Snippet at r