问题标签 [scala-reflect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
69 浏览

android - sbt-android:无法在 android 上使用 scala-reflect:找不到 java.rmi.Remote

我正在尝试使用 scala-reflect 包进行 android 开发。我在 build.sbt 中添加了 scala-reflect 依赖项:

但我得到一个例外:

我试图添加和构建项目的java源代码java.rmi.Remotejava.rmi.RemoteException因为android:package --core-librarysbt没有找到dexCoreLibrary选项),它构建成功,但是我得到了运行时错误。

那么,是否可以添加 java.rmi 依赖项,否则 scala.reflect 可以使用它?

我在实现方法 Option.orDefault 的上下文中使用 scala.reflect 库:

如果您知道 Option.orDefault 的更好实现(可能没有 scala.reflect),请告诉我。

0 投票
0 回答
112 浏览

scala - 涉及对象节俭生成的方法参数的非法循环引用

我正在尝试列出节俭服务端点参数的所有成员。

然后我得到了illegal cyclic reference involving object method_args

我想知道这是否是因为method_args 是MyService 中的一个静态类。有什么特殊的获取方式吗?我试过val paramsClass = mirror.staticClass("mytest.thrift.MyService$method_args")了,立即得到同样的错误。

谁能建议如何解决这个问题?

0 投票
1 回答
216 浏览

scala - 如何编写一个评估为类似于“reify”的树的 Scala 宏

我想编写一个宏来捕获程序片段并使其Tree在运行时可用。基本上,我想要的功能,reify但将其嵌入到不同的语法中。我想调用apply一个Workload伴随对象,提供一些代码并将Tree提供的代码存储在一个新创建的 Workload 对象的成员中。

不幸的是,我不能只转发,reify因为它是一个宏。我想,我必须编写自己的类似于reify. 但是我不知道如何Tree从宏中返回 a ,并且reify只提到了一些硬连线实现的来源。

如何实现?

更新

我写了一个小例子来强调我的观点

唯一缺少的是一种expr变成c.Expr[Expr[Unit]]

0 投票
1 回答
58 浏览

scala - 如何从多态类型字段加载隐式清单

我正在尝试为我的 ADT 构建一个解释器,但我不知道如何以一种很好的方式解决加载隐式清单的问题

这是我可以创建的最佳解决方案,但我不喜欢我必须创建 vManifest 函数才能在 eval 中加载清单。

有一个更好的方法吗?

0 投票
0 回答
116 浏览

scala - 如何使用 Scala 反射对从 ToolBox 解析的包中的代码进行类型检查?

以下简单示例(在 Scala 2.11.8 中运行):

导致以下异常toolbox.typecheck(tree)

如何获得经过类型检查的 AST 树?

0 投票
2 回答
110 浏览

scala - 在 Akka 接收中保留类型参数

Roland Kuhn 在这篇文章中已经回答了这个问题,然而,尽管有几条评论要求详细说明,但他并没有费心分享完整的答案。

这就是我想要做的:我有一个包装类case class Event[T](t: T),我将它的实例发送给 Akka 演员。在receive那个演员的方法中,然后我想区分Event[Int]and Event[String],由于类型擦除,这显然不是那么简单。

Roland Kuhn 在上述帖子中分享的是“只有一种方法可以做到”,即在消息中体现类型信息。所以我这样做了:

尽管被不同的人要求提供它,但罗兰库恩并没有说当时在receive方法中实际上要做什么。这是我尝试过的。

这是我能想到的最好的方法,因为很难将头绕在 Scala 的反射丛林中。但是,它没有编译:

因此,我特别询问该receive方法应该是什么样子。

0 投票
0 回答
231 浏览

scala - 在编译时列出包中的类

我试图在编译时列出一个包中的所有类。

让我们定义一个具有以下结构的项目:

在哪里:

方法.scala

Method1.scala 和 Method2.scala(更改各自的名称)

我想从 Main.scala 获取 com.package._ 中定义的类列表:

我可以对名称进行硬编码(如图所示),但我想知道是否可以在编译时获得这些名称。我知道在运行时可以使用http://software.clapper.org/classutil/

0 投票
1 回答
861 浏览

scala - 使用反射获取案例类注释?

我有一个案例类,例如:

我希望能够访问该注释及其存储的任何信息

我可以使用 scala 反射(使用 2.11.8)来获取案例访问器

但是当我尝试访问.annotations它们时,什么都没有。我意识到注释在技术上是在构造函数参数上,但我该如何得到它呢?

0 投票
1 回答
102 浏览

scala - 为什么这个公共字段有一个 PRIVATE 标志?

我正在编写一个 Scala 宏并遍历树以查找类中的非私有字段。

考虑宏查看的这段代码:

我正在遍历这段代码并到达bar's ValDef. 它的修饰符中只有两个标志:Flag.PRIVATEFlag.LOCAL.

使用private修饰符bar不会改变任何事情。使用protected修饰符只会添加Flag.PROTECTED到标志列表中。

我错过了什么?如何区分私有字段和公共字段?

编辑:

以下代码:

既没有Flag.PRIVATE也没有Flag.LOCAL,这是有道理的,因为它是一个“全球”公共 val。

我在里面工作的上下文是为wartremover编写一个新的 wart ,它只是Traverser在扩展宏并遍历代码块时从上下文的宇宙中获取一个。

0 投票
2 回答
116 浏览

scala - 如何在scala中调整字符串以更正classOf的输入类型?

我想删除以下导入:

原因是我想将其version作为参数传递,所以我可以有以下选项:

当我这样做时,它会像这样进行硬编码

但我需要它是一个字符串类型,所以我可以每次都附加版本。

我也尝试过这样做,但效果不佳:

你能帮忙吗?