scala-macros

    2熱度

    1回答

    我想編寫一個scala宏,它可以基於映射條目用簡單類型檢查覆蓋case類的字段值。 如果原始字段類型和覆蓋值類型兼容,則設置新值,否則保持原始值。 到目前爲止,我下面的代碼: import language.experimental.macros import scala.reflect.macros.Context object ProductUtils {

    6熱度

    1回答

    我想實現一個Scala宏,該宏使用部分函數,​​對函數的模式執行一些轉換,然後將其應用於給定的表達式。 要做到這一點,我開始用下面的代碼: def myMatchImpl[A: c.WeakTypeTag, B: c.WeakTypeTag](c: Context)(expr: c.Expr[A])(patterns: c.Expr[PartialFunction[A, B]]): c.Expr[

    1熱度

    2回答

    作爲宏的一部分,我想操縱部分函數的大小寫定義。 要做到這一點,我用Transformer操縱部分功能的病例定義和Traverser檢查病例定義的模式: def myMatchImpl[A: c.WeakTypeTag, B: c.WeakTypeTag](c: Context) (expr: c.Expr[A])(patterns: c.Expr[PartialFunction[A, B

    2熱度

    1回答

    這是一個簡化的示例,但問題依然存在。 我想要實現這個使用宏(斯卡拉基於僞代碼): (a: Int) => { val z = "toShort" a.z } 如果我具體化,我會獲得類似這樣: Function( List( ValDef( Modifiers(Flag.PARAM), newTermName("a"), I

    1熱度

    1回答

    我已經解構功能,得到了它vparams,現在我能夠撥打: case class Action(f: Function, ts: List[TypeName]) { def render(ruleName: String): Expr[Unit] = c.Expr[Unit](q""" val p = ${c.prefix} val value1 = p.value

    2熱度

    2回答

    我想使用宏來生成代碼實例看起來像這樣的對象: import scala.reflect.runtime.universe._ case class Example[T: TypeTag] { val tpe = implicitly[TypeTag[T]].tpe } 顯然,這轉化爲類似如下: import scala.reflect.runtime.universe._ ca

    1熱度

    1回答

    在DSL的細節不挖,我可以寫(based on that example): def InputLine = rule { Number ~ zeroOrMore("+" ~ Number ~> ((x: Int, y: Int) => x + y)) ~ EOI } 我需要從宏觀調用lambda函數。它斯卡拉AST表示如下: List( ValDef(Modifiers(PARAM)

    1熱度

    1回答

    這個最小示例的調用代碼似乎可以編譯(Eclipse Indigo SR2,Scala v2.10.20),但包含調用代碼的項目標有紅色叉號(不清除我如何得到進一步診斷)。沒有生成類文件。如果我用一些文字替換param.value,例如1,調用代碼編譯。 這是一個已知的問題?有沒有解決方法? def myMacro(param : Int): Int = macro myMacroImpl(para

    7熱度

    1回答

    這是我的previous question的後續處理。 我想像下面的代碼的工作。我希望能夠以產生宏生成的方法: case class Cat() test[Cat].method(1) 如果本身是使用宏(一"vampire" method)生成的方法的實現: // macro call def test[T] = macro testImpl[T] // macro implemen

    3熱度

    2回答

    我知道我可以做instanceOf檢查針對Function1或Function2等,但有沒有一種通用的方法來查看是否有功能或不是功能(它可以有任意數量的參數)。我試圖定義這樣的事情: type FuncType = (Any*) -> Any 但是,這也沒有工作。基本上我有一些看起來像這樣的代碼: call = (name: Any, args: Any*) -> if name.isFunc