如何从Scala宏隐式使用Predef?
有一个具有此签名的方法在场景后面创建隐式参数:如何从Scala宏隐式使用Predef?,scala,macros,implicit,scala-2.10,Scala,Macros,Implicit,Scala 2.10,有一个具有此签名的方法在场景后面创建隐式参数: class A { def test[T: ClassTag](t: T) = println(t) } val a = new A a.test(123456) 因此,应该为方法test的调用提供隐式参数。在REPL中执行具体化时,调用树如下所示: Apply( Apply( Select( Select( newTermName("a"),
class A {
def test[T: ClassTag](t: T) = println(t)
}
val a = new A
a.test(123456)
因此,应该为方法test
的调用提供隐式参数。在REPL中执行具体化时,调用树如下所示:
Apply(
Apply(
Select(
Select(
newTermName("a"),
newTermName("test")
),
List(
Literal(Constant(123456))) // explicit method args
),
List(
Select(This(newTypeName("Predef")),
newTermName("implicitly"))) // implicit args
)
)
我试图使用宏实现进行此调用,但这并没有编译,并且给了我:Predef不是一个封闭类。我尝试了不同的方法,但没有成功,也没有找到任何样本
所以问题是:如何为使用宏的方法提供隐式参数?手动AST操作可能很棘手。尝试
选择(Ident(newTermName(“scala”)),newTermName(“Predef”))
而不是这个(newTypeName(“Predef”)
或者更好,考虑使用准引号()。有了它们,隐式地编写对的引用变得非常简单,就像
scala.Predef.implicitly
手动AST操作一样棘手。尝试选择(Ident(newTermName(“scala”)),newTermName(“Predef”))
而不是这个(newTypeName(“Predef”)
或者更好,考虑使用准引号()。有了它们,隐式地编写对的引用变得非常简单,就像
scala.Predef.implicitly
手动AST操作一样棘手。尝试选择(Ident(newTermName(“scala”)),newTermName(“Predef”))
而不是这个(newTypeName(“Predef”)
或者更好,考虑使用准引号()。有了它们,隐式地编写对的引用变得非常简单,就像
scala.Predef.implicitly
手动AST操作一样棘手。尝试选择(Ident(newTermName(“scala”)),newTermName(“Predef”))
而不是这个(newTypeName(“Predef”)
或者更好,考虑使用准引号()。有了它们,隐式地编写对的引用变得非常简单,就像隐式地编写scala.Predef。我了解Quasiqueotes,但试图最小化依赖性并更深入地了解正在发生的事情。所有这些宏观的东西都很棒。谢谢谢谢,这很有效。我了解Quasiqueotes,但试图最小化依赖性并更深入地了解正在发生的事情。所有这些宏观的东西都很棒。谢谢谢谢,这很有效。我了解Quasiqueotes,但试图最小化依赖性并更深入地了解正在发生的事情。所有这些宏观的东西都很棒。谢谢谢谢,这很有效。我了解Quasiqueotes,但试图最小化依赖性并更深入地了解正在发生的事情。所有这些宏观的东西都很棒。谢谢