2017-02-20 63 views
1

我一直在追逐以下问题很长一段时间,并希望有人比我有更多的经验可以帮助我解决它。无法在宏中找到代理

在我的测试情况下确切的错误如下:

java.lang.IllegalArgumentException异常:对VAL用户无法找到代理:specs.BasicSpec#用户列表(价值用户,方法applyOrElse, ,方法$ anonfun $新的$ 97,值fiveLetterNames,方法$ anonfun $新的$ 90方法$ anonfun $新的$ 20值,类BasicSpec,包规格,包)(currentOwner =值fiveLetterNames)

该测试可以在这里找到:

https://github.com/outr/reactify/blob/master/shared/src/test/scala/specs/BasicSpec.scala#L227

这是有问题的宏:

https://github.com/outr/reactify/blob/master/shared/src/main/scala/com/outr/reactify/Macros.scala#L72

没有从我不知所措我如何解决这个错误的详细信息。任何援助非常感谢。

+0

你解决了这个问题吗?我有相同的编译器错误。 –

+0

@EvgenyVeretennikov我做了,但它已经很长时间了,现在我不记得问题是什么。我认为它与使用仅在编译时在运行时可用的引用有关。如果你分享一些代码,我很乐意尝试和帮助。 – darkfrog

回答

2

我在我的项目中遇到了同样的问题。解决方案是不要在宏中多次使用相同的“lambda”*。

“拉姆达” 如下:

def macroSample[A, B](c: blackbox.Context) 
        (lambda: c.Expr[A => B] /* <- lambda */) = { ... } 

附:实际上我现在看不到您的原始代码。这是一个解决方案在我的情况下工作