2017-02-20 56 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 */) = { ... } 

附:實際上我現在看不到您的原始代碼。這是一個解決方案在我的情況下工作