例如,需要檢查表達式是否爲整數類型: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
我想創建一個匹配語句使用宏,匹配給定類型的所有子類。 但我在提取案例類的字段值時遇到了問題。 例如: sealed abstract class Foobar
case class Foo(x:Int,f:Foobar) extends Foobar
case class Bar(s:String, f:Foobar) extends Foobar
現在我想創建的代碼看起來像這樣,當Foo
繼續從Compilation issue when accessing parameter value in Scala macro開始,我想定義一個應用謂詞的宏。如果語句fn = c.eval(pred)存在,則客戶端代碼無法編譯,但沒有任何關於問題性質的指示。 def fnInvocation(value : Int, pred : c.Expr[ Int => Boolean ]): Boo
Quasiquotes是驚人的 - 他們使Scala編寫的宏非常痛苦,而且根據我的經驗,他們幾乎總是像我所期望的那樣工作。最重要的是,它們現在可用於Scala 2.10中的as a plugin。 這個問題是關於我寫入this blog post時遇到的一個小問題。當我能夠找到幾分鐘時,它就在我的清單上,但我想我會在這裏發佈它,以防其他人能夠打敗我,並幫助其他遇到同樣問題的人。 假設我有名字型對列
類型宏已關閉。 但是我有兩個重要的用例需要它們。結果是我的應用程序中的一個重要的可擴展性丟失。 兩者都是給定其他類型的動態編譯時生成類型。 基本上我想這樣做(顯然不是Scala代碼,但我認爲你的想法): type T[U] = macro usecase1[U]
def usecase1[U]= U match {
case t if (t <:< Int) => String