问题标签 [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 回答
1883 浏览

scala - 在运行时从 scala 中的案例类对象中检索字段名和值

示例案例类:正在尝试创建通用查询构建器

我们如何在 scala 中检索字段名称和相应的值,

在进一步研究中,

使用 Scala 反射的解决方案:

另一种解决方案,

尝试去:

0 投票
1 回答
1376 浏览

scala - 使用 Scala 反射检查对象上的方法或查找 Map 上的键类型

我正在将一个类从 Ruby 移植到 Scala 2.11,它实现了消息中的变量合并。我想将一个对象数组传递给 merge 方法,并让它在每个对象中搜索消息文本中引用的键。

其核心是一个名为lookUp(key: String, obj: AnyRef) 的方法,它接收要搜索的单个键,以及要搜索该键的单个对象。如果对象是一个 Map,并且 Map 的键是 Symbol 或 String,那么它将在 Map 中查找请求的键。否则,它将检查对象是否具有与键名相同的方法,如果有,它将调用该方法。

在现有的 Ruby 代码中,很容易做到这一点:

由于这样做很容易,Ruby 代码还会查找同名的实例变量。我的 Scala 版本不一定需要该功能。

我遇到的问题之一是我发现的示例要求我提前知道对象的类,以便我可以调用ru.typeOf[MyClass].declaration(ru.TermName("key"))(where ruis scala.reflect.runtime.universe)。

另一个问题是,这种消息合并可能每分钟发生数百次,并且反射似乎是一个缓慢而复杂的过程。如果这一切都按计划进行,我可能会按对象类型缓存反射结果。

更新:我正在考虑这样的事情,但这是否矫枉过正?或者是否有必要正确捕获 Map 中的类型?此外,这不会编译。MapSymbol并且String不是适合其上下文的类型。

更新 2:我从来没有想过我可以使用asInstanceOf类似Map[String, _]. 我使用@johny 的第二个代码示例来提出我的解决方案。我将方法名称按类缓存在mutable.HashMap[Class[_], Set[String]].

0 投票
1 回答
129 浏览

scala - 通过它们的 apply 方法和 scala 反射实例化 scala 集合

我有一个工具试图构建各种 scala 集合的子类实例,例如scala.collection.Seq. 我事先不知道具体应该建什么类,所以我尝试使用反射来获取apply伴生对象中的方法如下(类似于声明List[Int](1, 2, 3))。

尽管如此,我得到了以下异常。我无法弄清楚我应该将什么传递给该apply方法。

感谢您提前提供的任何帮助。

0 投票
1 回答
1400 浏览

scala - Scala 反射:knownDirectSubclasses 仅适用于密封特征?

鉴于 这个问题SI-7046,这根本不是我所期望的。

scalac test.scala && scala Test在以下 Scala 2.11.6 中打印一个空的Set()

但是,如果我更改trait Foo为,它会按预期sealed trait Foo打印。Set(class Bar, class Baz)

这里发生了什么?

0 投票
0 回答
163 浏览

scala - 如何在scala中使用反射实例化泛型类

我有一个以这些特征开头的类层次结构:

我需要自动构建所有直接子类的列表MessageKey。通过到处搜索,我想到了这一点:

这段代码给了我 type 的对象MessageKey[Nothing]。正如你在上面看到的,我不知何故得到了Type每个键的,但我不知道如何使用它。

我想做类似的事情

但是,当然,我不能aType像那样使用那里。任何帮助表示赞赏。

0 投票
1 回答
6732 浏览

scala - 获取密封特征的子类

是否有可能(通过宏、某种形式的 Shapeless automagic 或其他方式)获得密封特征的子类列表:

  • 在编译时?
  • 在运行时?
0 投票
0 回答
596 浏览

scala - Scala如何获取带注释的类

在 Java 中,我可以org.reflections用于扫描包和搜索带注释的类。

像这样:

如何在scala中获得带注释的类?我使用scala 2.11scala-reflect

PSorg.reflections在scala中效果很好,但我搜索原生乐器。

0 投票
2 回答
2079 浏览

scala - Scala:为案例类动态生成匹配子句

我想在一组“条件动作”规则中使用 Scala 模式匹配的强大功能。这些规则不是事先知道的,而是根据一些复杂的标准在运行时生成的。算法生成机制可以被认为是完全独立的,不是这个问题的一部分,它涉及如何通过 Scala 反射/准引用来表达这一点。

具体来说,我希望case v0@x(v1,_,v2): X => f(v1,v2)在运行时生成(一般形式的)案例定义。

toolBox.parse(str)对于在运行时生成的某些字符串,大概可以做到这一点。但是,如果可能的话,似乎需要包含比这更大程度的类型安全:

Term,Var(name: Char),Lit(value:Int),Group(a: Term,b: Term,c: Term)更具体地说,我希望case defs 与Terms ( )的密封case 类层次结构相匹配。

例如,生成的案例 def 通常会返回一些无函数、部分或全部 v0、v1、v2:

我正在尝试按照此处给出的 case defs 的 quasiquotes 描述进行操作,但语法相当令人费解(并且 Scala 2.11 的 eclipse 拒绝向我显示类型),所以下面是我所得到的. 我的具体问题嵌入在代码中:

0 投票
1 回答
46 浏览

scala - 反思类型成员?

我知道这是可能的:

但是,现在我想做A一个抽象类型:

如何实现该isDouble功能?

0 投票
0 回答
93 浏览

scala - 如何使用 scala-reflect 找到父隐式参数?

我有两节课:

给定一个Symbol对应于Y的隐式构造函数参数,我想找到它对应的父类隐式参数的符号(如果存在的话)。

现在我需要过滤它以使其具有相同的类型(或超类型,但这对我的用例无关紧要)。我试过xParam.typeSignature =:= yOrdSym.typeSignature了,没有用。这是有道理的,因为类型参数有不同的所有者。但是,xParam.typeSignature =:= yOrdSym.typeSignatureIn(xSym.toType)也不xParam.typeSignatureIn(ySym.toType) =:= yOrdSym.typeSignature行。如何正确执行?