Scala 使用插值字符串作为默认参数的@elidable函数的编译错误
我想写我自己的断言,比如:Scala 使用插值字符串作为默认参数的@elidable函数的编译错误,scala,string-interpolation,scalac,elidable,Scala,String Interpolation,Scalac,Elidable,我想写我自己的断言,比如: import scala.annotation.elidable object Util { // doesn't matter if true or false def someCondition(checking: Any): Boolean = false @elidable(elidable.ASSERTION) def assertSomething(checking: Any)( msg: => String = s"So
import scala.annotation.elidable
object Util {
// doesn't matter if true or false
def someCondition(checking: Any): Boolean = false
@elidable(elidable.ASSERTION)
def assertSomething(checking: Any)(
msg: => String = s"Something didn't check out for $checking"
): Unit = {
assert(someCondition(checking), msg)
}
}
这可以很好地编译,并在适当的地方抛出AssertionError
但是,如果我尝试使用scalacOption“-Xelide低于最大值”进行编译,则会出现以下错误:
exception when typing new StringContext("Something didn\'t check out for ", "").s(checking)/class scala.reflect.internal.Trees$Apply
too many arguments (2) for constructor StringContext: (parts: Seq)StringContext in file Util.scala
scala.reflect.internal.Types$TypeError: too many arguments (2) for constructor StringContext: (parts: Seq)StringContext
at scala.tools.nsc.typechecker.Contexts$ThrowingReporter.handleError(Contexts.scala:1402)
at scala.tools.nsc.typechecker.Contexts$ContextReporter.issue(Contexts.scala:1254)
at scala.tools.nsc.typechecker.Contexts$Context.issue(Contexts.scala:576)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$27(Typers.scala:4648)
at scala.tools.nsc.typechecker.Typers$Typer.reportError$2(Typers.scala:4648)
at scala.tools.nsc.typechecker.Typers$Typer.onError$3(Typers.scala:4693)
at scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4718)
at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4745)
at scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5510)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5527)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:755)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:5774)
at scala.tools.nsc.typechecker.Typers$Typer.typedValDefImpl(Typers.scala:2068)
at scala.tools.nsc.typechecker.Typers$Typer.typedValDef(Typers.scala:2024)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedDefDef$6(Typers.scala:2260)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedDefDef$5(Typers.scala:2260)
at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:2260)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5475)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:755)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5624)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3075)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$9(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1987)
at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1811)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5476)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:755)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5624)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3075)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$9(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5176)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5479)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:755)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5620)
at scala.tools.nsc.transform.Erasure$ErasureTransformer.$anonfun$transform$4(Erasure.scala:1237)
at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:1233)
at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:808)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:140)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:423)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:416)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1(Global.scala:387)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1$adapted(Global.scala:387)
at scala.tools.nsc.Global$GlobalPhase$$Lambda$267/586617651.apply(Unknown Source)
at scala.collection.Iterator.foreach(Iterator.scala:929)
at scala.collection.Iterator.foreach$(Iterator.scala:929)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:387)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1427)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1412)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1407)
at scala.tools.nsc.Global$Run.compile(Global.scala:1501)
at scala.tools.nsc.MainClass.doCompile(Main.scala:24)
at scala.tools.nsc.Driver.process(Driver.scala:55)
at scala.tools.nsc.Driver.main(Driver.scala:68)
at scala.tools.nsc.Main.main(Main.scala)
error:
unrecoverable error
while compiling: Util.scala
during phase: globalPhase=erasure, enteringPhase=posterasure
library version: version 2.12.2
compiler version: version 2.12.2
reconstructed args: -Xelide-below 2147483647
last tree to typer: TypeTree(class StringContext)
tree position: line 9 of Util.scala
tree tpe: StringContext
symbol: case class StringContext in package scala
symbol definition: case class StringContext extends Product with Serializable (a ClassSymbol)
symbol package: scala
symbol owners: class StringContext
call site: package <root> in <none>
== Source file context for tree position ==
6
7 @elidable(elidable.ASSERTION)
8 def assertSomething(checking: Any)(
9 msg: => String = s"Something didn't check out for $checking"
10 ): Unit = {
11 assert(someCondition(checking), msg)
12 }
error: scala.reflect.internal.FatalError:
unrecoverable error
while compiling: Util.scala
during phase: globalPhase=erasure, enteringPhase=posterasure
library version: version 2.12.2
compiler version: version 2.12.2
reconstructed args: -Xelide-below 2147483647
last tree to typer: TypeTree(class StringContext)
tree position: line 9 of Util.scala
tree tpe: StringContext
symbol: case class StringContext in package scala
symbol definition: case class StringContext extends Product with Serializable (a ClassSymbol)
symbol package: scala
symbol owners: class StringContext
call site: package <root> in <none>
== Source file context for tree position ==
6
7 @elidable(elidable.ASSERTION)
8 def assertSomething(checking: Any)(
9 msg: => String = s"Something didn't check out for $checking"
10 ): Unit = {
11 assert(someCondition(checking), msg)
12 }
at scala.reflect.internal.Reporting.abort(Reporting.scala:61)
at scala.reflect.internal.Reporting.abort$(Reporting.scala:57)
at scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:16)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:762)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:5774)
at scala.tools.nsc.typechecker.Typers$Typer.typedValDefImpl(Typers.scala:2068)
at scala.tools.nsc.typechecker.Typers$Typer.typedValDef(Typers.scala:2024)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedDefDef$6(Typers.scala:2260)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedDefDef$5(Typers.scala:2260)
at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:2260)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5475)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:755)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5624)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3075)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$9(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1987)
at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1811)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5476)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:755)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5624)
at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3075)
at scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$9(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3219)
at scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5176)
at scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5479)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:755)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5563)
at scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
at scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5620)
at scala.tools.nsc.transform.Erasure$ErasureTransformer.$anonfun$transform$4(Erasure.scala:1237)
at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:1233)
at scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:808)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:140)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:423)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:416)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1(Global.scala:387)
at scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1$adapted(Global.scala:387)
at scala.tools.nsc.Global$GlobalPhase$$Lambda$267/586617651.apply(Unknown Source)
at scala.collection.Iterator.foreach(Iterator.scala:929)
at scala.collection.Iterator.foreach$(Iterator.scala:929)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1417)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:387)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1427)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1412)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:1407)
at scala.tools.nsc.Global$Run.compile(Global.scala:1501)
at scala.tools.nsc.MainClass.doCompile(Main.scala:24)
at scala.tools.nsc.Driver.process(Driver.scala:55)
at scala.tools.nsc.Driver.main(Driver.scala:68)
at scala.tools.nsc.Main.main(Main.scala)
键入new StringContext时出现异常(“,”)s(正在检查)/class scala.reflect.internal.Trees$Apply
文件Util.scala中构造函数StringContext:(parts:Seq)StringContext的参数太多(2)
scala.reflect.internal.Types$TypeError:构造函数StringContext的参数(2)太多:(部分:Seq)StringContext
位于scala.tools.nsc.typechecker.Contexts$ThrowingReporter.handleError(Contexts.scala:1402)
位于scala.tools.nsc.typechecker.Contexts$ContextReporter.issue(Contexts.scala:1254)
位于scala.tools.nsc.typechecker.Contexts$Context.issue(Contexts.scala:576)
在scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$27(Typers.scala:4648)
位于scala.tools.nsc.typechecker.Typers$Typer.reportError$2(Typers.scala:4648)
在scala.tools.nsc.typechecker.Typers$Typer.onError$3(Typers.scala:4693)
在scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:4718)
在scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4745)
在scala.tools.nsc.typechecker.Typers$Typer.typedInAnyMode$1(Typers.scala:5510)
位于scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5527)
位于scala.tools.nsc.transform.Erasure$橡皮擦.typed1(Erasure.scala:755)
位于scala.tools.nsc.typechecker.Typers$Typer.runtyper1(Typers.scala:5563)
位于scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
在scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
位于scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
位于scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:5774)
位于scala.tools.nsc.typechecker.Typers$Typer.typedValDefImpl(Typers.scala:2068)
位于scala.tools.nsc.typechecker.Typers$Typer.typedValDef(Typers.scala:2024)
在scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedDefDef$6(Typers.scala:2260)
在scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedDefDef$5(Typers.scala:2260)
位于scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:2260)
在scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5475)
位于scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
位于scala.tools.nsc.transform.Erasure$橡皮擦.typed1(Erasure.scala:755)
位于scala.tools.nsc.typechecker.Typers$Typer.runtyper1(Typers.scala:5563)
位于scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
在scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
位于scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
位于scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5624)
位于scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3075)
在scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$9(Typers.scala:3219)
位于scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3219)
在scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1987)
位于scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1811)
在scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5476)
位于scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
位于scala.tools.nsc.transform.Erasure$橡皮擦.typed1(Erasure.scala:755)
位于scala.tools.nsc.typechecker.Typers$Typer.runtyper1(Typers.scala:5563)
位于scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
在scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
位于scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
位于scala.tools.nsc.typechecker.Typers$Typer.typedByValueExpr(Typers.scala:5624)
位于scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:3075)
在scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$9(Typers.scala:3219)
位于scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3219)
位于scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5176)
在scala.tools.nsc.typechecker.Typers$Typer.typedMemberDef$1(Typers.scala:5479)
位于scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5526)
位于scala.tools.nsc.transform.Erasure$橡皮擦.typed1(Erasure.scala:755)
位于scala.tools.nsc.typechecker.Typers$Typer.runtyper1(Typers.scala:5563)
位于scala.tools.nsc.typechecker.Typers$Typer.typedInternal(Typers.scala:5593)
在scala.tools.nsc.typechecker.Typers$Typer.body$2(Typers.scala:5537)
位于scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5541)
位于scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5620)
在scala.tools.nsc.transform.Erasure$ErasureTransformer.$anonfun$transform$4(Erasure.scala:1237)
在scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:1233)
在scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:808)
位于scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:140)
位于scala.tools.nsc.transform.transform$Phase.apply(transform.scala:30)
在scala.tools.nsc.Global$GlobalPhase.$anonfun$applyPhase$1(Global.scala:423)
位于scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:416)
在scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1(Global.scala:387)
在scala.tools.nsc.Global$GlobalPhase.$anonfun$run$1$adapted(Global.scala:387)
位于scala.tools.nsc.Global$GlobalPhase$$Lambda$267/586617651.apply(未知来源)
位于scala.collection.Iterator.foreach(Iterator.scala:929)
位于scala.collection.Iterator.foreach$(Iterator.scala:929)
位于scala.collection.AbstractIterator.foreach(迭代器.scala:1417)
A.