【问题标题】:(Macro-based?) workaround for "applyDynamic does not support passing a vararg parameter" in Scala(基于宏?)Scala中“applyDynamic不支持传递可变参数”的解决方法
【发布时间】:2016-09-29 04:44:44
【问题描述】:
我正在使用a library,它大量使用宏和applyDynamic。 The compiler bug 阻止将 varargs 与 applyDynamic 一起使用给我带来了很多痛苦,我希望找到一种解决方法,允许我将动态参数序列传递到 applyDynamic 然后调用宏。
在调用 applyDynamic with little success 之前,我尝试编写一个扩展序列或 splat 的宏,但我对 Scala 宏不太满意,所以我可能做错了什么。
【问题讨论】:
标签:
scala
macros
scala-macros
【解决方案1】:
我在这一行使用 ScalaJS 时遇到了这个问题:
literal(seq: _*)
解决方法很简单:
literal.applyDynamic("apply")(seq: _*)
解释:literal(更准确地说:scala.scalajs.js.Dynamic.literal)是一个扩展 scala.Dynamic 的对象,并且调用 literal(...) 被取消为 literal.apply(...),它本身应该由编译器转换(如果没有错误)为 literal.applyDynamic("apply")(...)。嗯,有点难看,不过糖总是可以自己去掉的。
【解决方案2】:
自 Scala 2.12.5 以来,此问题一直是 fixed