scala-macros

    2熱度

    1回答

    我想從通用Scala代碼中調用像FastUtil或Trove這樣的專用集合庫。我想實現像 def openHashMap[@specialized K, @specialized V]: ${K}2${V}OpenHashMap = new ${K}2${V}OpenHashMap() 一些地方讓${X}顯然不是有效的Scala,只是我的元標記的文本替換, 使openHashMap[

    10熱度

    2回答

    我有一個在maven項目中工作的普通scala-2.10宏,只需將scala-reflect.jar庫作爲pom中的依賴項包含在內,但是我需要什麼開啓宏觀天堂?我正在使用scala-2.10和scala-maven-plugin-3.1.5。

    0熱度

    1回答

    例如,需要檢查表達式是否爲整數類型:Byte,Short,Int,Long,但不是Double或Float。下面的代碼並不總是奏效: case Apply(Select(q, n), List(rhs)) => if (q.tpe.weak_<:<(typeOf[Long])) true else false 對於一些問答的TPE將不會弱一致,即使它有int類型: a.type we

    2熱度

    1回答

    我想創建一個匹配語句使用宏,匹配給定類型的所有子類。 但我在提取案例類的字段值時遇到了問題。 例如: sealed abstract class Foobar case class Foo(x:Int,f:Foobar) extends Foobar case class Bar(s:String, f:Foobar) extends Foobar 現在我想創建的代碼看起來像這樣,當Foo

    3熱度

    1回答

    我試圖創建一個宏,該宏允許我捕獲傳遞給構造函數的表達式的文本。我希望表達式的文本用於調試目的。宏實現如下: package nimrandsLibrary.react.macroImpl object Macros { def applyImpl[T : context.WeakTypeTag, U : context.WeakTypeTag](context : scala.ref

    2熱度

    1回答

    繼續從Compilation issue when accessing parameter value in Scala macro開始,我想定義一個應用謂詞的宏。如果語句fn = c.eval(pred)存在,則客戶端代碼無法編譯,但沒有任何關於問題性質的指示。 def fnInvocation(value : Int, pred : c.Expr[ Int => Boolean ]): Boo

    3熱度

    1回答

    我知道我可以添加動態「田」是這樣的: import collection.mutable class DynamicType extends Dynamic { private val fields = mutable.Map.empty[String, Any].withDefault {key => throw new NoSuchFieldError(key)}

    8熱度

    1回答

    Quasiquotes是驚人的 - 他們使Scala編寫的宏非常痛苦,而且根據我的經驗,他們幾乎總是像我所期望的那樣工作。最重要的是,它們現在可用於Scala 2.10中的as a plugin。 這個問題是關於我寫入this blog post時遇到的一個小問題。當我能夠找到幾分鐘時,它就在我的清單上,但我想我會在這裏發佈它,以防其他人能夠打敗我,並幫助其他遇到同樣問題的人。 假設我有名字型對列

    25熱度

    1回答

    這個問題與我的previous question相似(儘管這是關於我在different context中遇到的問題)。 我可以在函數文本模式匹配很容易且無quasiquotes: import scala.reflect.macros.Context import scala.language.experimental.macros object QQExample { def

    1熱度

    1回答

    類型宏已關閉。 但是我有兩個重要的用例需要它們。結果是我的應用程序中的一個重要的可擴展性丟失。 兩者都是給定其他類型的動態編譯時生成類型。 基本上我想這樣做(顯然不是Scala代碼,但我認爲你的想法): type T[U] = macro usecase1[U] def usecase1[U]= U match { case t if (t <:< Int) => String