scala-macros

    0熱度

    1回答

    在保持用Scala編寫2.10.x老Scala代碼重寫後,意想不到的事情發生在我身上時,我試着輸入macros檢查TypeTree。看看下面的代碼, annottees.map(_.tree).toList match { case q"$mods def $name[..$tpes](...$args) : $returnType = { ..$body }" :: Nil =>

    4熱度

    1回答

    我想要捕獲我的宏的輸出分配給的變量的名稱。與build.sbt中的project完全一樣。如果有解決方案(庫),我會更喜歡它,因爲它看起來很普通的用例。 下面是小例子 val someValue = myMacro() ,並作爲myMacro()輸出我想獲得字符串"someValue"。

    0熱度

    1回答

    用於Scala的類的實現I型有一些問題階宏和識別實現類型構造函數。 不知道,如果我在這裏做得不對或有什麼正確的調用會。 從文檔,它看起來像typeSignatureIn應該返回正確的信息,例如ClassTag [INT],但是當我運行宏,我居然得到ClassTag [U]這無法編譯爲U是類型參數,而不是實現類型。 import scala.language.experimental.macros

    2熱度

    1回答

    我正在寫一個Scala宏(Scala 2.11),我想要使用inferImplicitValue來獲得表示宏內隱式變量的樹,評估該語法樹並使用值。我實際上已經這樣做了,但它似乎並不適用於所有情況[1]。我構建了一個失敗的簡化示例。 // a class for implicit evidence class DemoEvidence(val value: Int) // define 'fo

    3熱度

    1回答

    我正在寫一個Scala宏,並遍歷樹來尋找類中的非私有字段。 考慮以下代碼,宏觀着眼於: class Foo { val bar: String = "test" } 我穿越這個代碼和獲得bar的ValDef。它的修飾符中只有兩個標誌:Flag.PRIVATE和Flag.LOCAL。 在bar上使用private修飾符不會改變任何內容。使用protected修飾符僅將Flag.PRO

    0熱度

    1回答

    我正在將Scala函數導出爲外部格式。爲此我使用scala.meta和StaticAnnotation。喜歡的東西: @ExportFunctions object MyFunctions { def max(x: Int, y: Int): Int = x max y } class ExportFunctions extends StaticAnnotation {

    1熱度

    1回答

    我正在玩scala-meta的新款macro annotations。所以我延長了@Main註釋的例子: SConsumer.scala: import scala.meta._ class SConsumer extends scala.annotation.StaticAnnotation { inline def apply(defn: Any): Any = meta {

    0熱度

    1回答

    我試圖創建一個斯卡拉宏象生成代碼: val x = new com.foo.MyClass() 其中com.foo.MyClass肯定是在類路徑在編譯時和運行在項目中使用宏的時間。 我使用以下c.Tree生成代碼: Apply(Select(New(Ident(TermName("com.foo.MyClass"))), termNames.CONSTRUCTOR), List()) 打印sh

    0熱度

    1回答

    我正在創建一些從封裝方法的註釋中讀取一些信息的宏庫。 @info(foo(bar, baz)) def enclosing() = { myMacro() } 這些信息在StaticAnnotation@info被編碼爲foo(bar, baz)。 foo(bar, baz)包含的信息myMacro需要,然而,foo(bar, baz)不能在該位置@info型檢查,並導致編譯器錯

    1熱度

    1回答

    我需要真的 untypecheck我的宏發出的樹。這意味着不僅要移除推斷的類型和所有這些,還要移除由編譯器推斷的隱含參數。甚至沒有resetAllAttrs似乎照顧這一點。 Symbol s似乎有一個方法isSynthetic,指示代碼是否由編譯器生成,但顯然該標誌僅針對自動生成的getter和setter等設置,而不針對編譯器插入的隱式值。 我當然可以手動查找所有隱式參數列表並刪除它們,但是我也