我正在寫一個Scala宏(Scala 2.11),我想要使用inferImplicitValue來獲得表示宏內隱式變量的樹,評估該語法樹並使用值。我實際上已經這樣做了,但它似乎並不適用於所有情況[1]。我構建了一個失敗的簡化示例。 // a class for implicit evidence
class DemoEvidence(val value: Int)
// define 'fo
我正在寫一個Scala宏,並遍歷樹來尋找類中的非私有字段。 考慮以下代碼,宏觀着眼於: class Foo {
val bar: String = "test"
}
我穿越這個代碼和獲得bar的ValDef。它的修飾符中只有兩個標誌:Flag.PRIVATE和Flag.LOCAL。 在bar上使用private修飾符不會改變任何內容。使用protected修飾符僅將Flag.PRO
我正在將Scala函數導出爲外部格式。爲此我使用scala.meta和StaticAnnotation。喜歡的東西: @ExportFunctions
object MyFunctions {
def max(x: Int, y: Int): Int = x max y
}
class ExportFunctions extends StaticAnnotation {
我試圖創建一個斯卡拉宏象生成代碼: val x = new com.foo.MyClass()
其中com.foo.MyClass肯定是在類路徑在編譯時和運行在項目中使用宏的時間。 我使用以下c.Tree生成代碼: Apply(Select(New(Ident(TermName("com.foo.MyClass"))), termNames.CONSTRUCTOR), List()) 打印sh
我需要真的 untypecheck我的宏發出的樹。這意味着不僅要移除推斷的類型和所有這些,還要移除由編譯器推斷的隱含參數。甚至沒有resetAllAttrs似乎照顧這一點。 Symbol s似乎有一個方法isSynthetic,指示代碼是否由編譯器生成,但顯然該標誌僅針對自動生成的getter和setter等設置,而不針對編譯器插入的隱式值。 我當然可以手動查找所有隱式參數列表並刪除它們,但是我也