问题标签 [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.
scala - 在 Scala 反射中,一个宇宙可以有多个镜像吗?
在 scala.reflection.api.Universe 的所有子类中,我从未见过 Mirror 的多个实现。这是否意味着可以将 Mirror 与 Universe 合并。将 Universe 和 Mirror 分开的设计决策是什么?
scala - 在 Scala 反射中,编译时宇宙是否可访问?
在本文档中:
http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.html
Scala 反射宇宙被描述为有 2 个实现:1 个用于运行时(在 scala.reflect.runtime 下)和 1 个用于编译时(在 scala.reflect.macro 下)。
但是,我只能通过以下方式访问运行时 Universe:
编译时 Universe 包下没有具体的实现。实现和调用它的能力是否故意隐藏,实现由 scala 编译器硬编码?如果是这样,那么在使用 Scala 反射之前强制指定一个 Universe 的原因是什么?
非常感谢您的任何见解。
scala - 在 Scala 反射中,为什么 TypeTag 上的反射函数仍然有类型擦除?
考虑以下scala程序:
由于 TypeTag 同时具有 Seq 和 String 信息,我希望fn.returnType
给出正确的结果“String”,但在这种情况下,我得到了以下程序输出:
随后抛出此异常:
显然 String 类型被删除了,只留下一个通配符类型 'A'
为什么 TypeTag 无法按预期产生正确的擦除类型?
scala - Scala:在方法中使用 TypeTag
我正在尝试编写这样的方法:
哪里mapTo
有签名:
使用org.scala-lang.scala-reflect
能够执行以下操作:
foo[String](1)
,foo[List[Double]](10)
等等。
我尝试以不同的方式编写它,但我得到了不同的编译错误。有没有办法让这样的东西起作用?
此链接如何从 TypeTag 中获取 ClassTag,或同时获取两者?不澄清我要做什么。看起来像是试图“过滤”一些关于某个类的信息。
scala - 如何从 10L 中获取 ClassTag[Long]
使用以下代码:
只得到盒装类型:
有更好的解决方案吗?或者在scala中是不可能的?
scala - 通过类名查找类的参数
我正在做一个宏注释,我有这样的东西:
问题是 whenclassName
是类似的东西List
,它显然会抱怨,因为它需要参数。如果是List[String]
,那很好。
老实说,我不完全理解为什么,例如,classOf[List]
考虑到 List 中的泛型类型是不变的,为什么不被接受?执行classOf[List[String]]
and classOf[List[Integer]]
,返回相同的类。
因此,假设我的方法findClass
将始终接收一个没有参数或具有不变参数的类,我该如何对ValDef
?
scala - 在 Scala 反射中,如何获取具体子类的泛型类型参数?
假设我有一个通用超类:
和一个具体的子类:
我想通过scala反射获取函数“fn”的类型参数,所以我选择并过滤它的成员:
我期待 scala 给我正确的结果,也就是说List(List(Int))
,我只得到了通用的List(List(T))
仔细研究文档,我发现 typeSignature 是罪魁祸首:
它建议我使用替代方案:
但是,由于类 Example 不再是通用的,我无法从 typeTag[Example] 获取站点,谁能建议我如何仅给定 typeTag[Example] 获取 typeOf[Int]?或者没有办法做到这一点,我必须恢复到 Java 反射?
非常感谢你的帮助。
更新:经过一些快速测试后,我发现即使MethodSymbol.returnType也无法按预期工作,以下代码:
也 yield T
,它不能被asSeenFrom纠正,因为下面的代码不会改变结果:
scala - 如何使用 Scala 宏检查实现
我需要找出方法实现中是否使用了某种方法。例如,我有一个很棒的应用程序:
我想测试方法是否getGreetings
使用了fill
Array 的伴生对象的功能。测试将通过上述实现成功并失败,例如:
在这段视频的帮助下,我了解到我可以使用这样的宏检查实现:
现在printTree
揭示了使用的fill
方法:
这里缺少的部分是如何对任何方法的代码做同样的事情,这样我就可以获得方法内部的树getGreetings
。
提前致谢 :)
scala - 如何将 scala.reflect.io.File 导入我的项目?
我正在使用 IntelliJ IDE。
我想import scala.reflect.io.File
从包中 - scala-reflect-2.11.4
。但是当我输入时import scala.reflect
,编译器认为我正在尝试使用class reflect
包中的scala-library-2.11.8
。
如何强制编译器使用 import class scala.reflect.File
from scala-reflect-2.11.4
?
scala - 在 scala 宏中保留方法参数名称
我有一个界面:
我有一个宏,它迭代接口的方法并使用方法名称和参数进行处理。我通过执行以下操作访问方法名称:
如果我打印出 的doSomething
参数名称,usefulName
则变为x$1
. 为什么会发生这种情况,有没有办法保留原始参数名称?
我正在使用 scala 版本 2.11.8、宏天堂版本 2.1.0 和黑盒上下文。
该接口实际上是我控制的一个单独的 sbt 项目中的 java 源代码。我试过编译:
参数标志应该保留名称,但我仍然得到与以前相同的结果。