如何在REPL中使用:phase power命令?

问题描述 投票:1回答:1

Scala REPL的[Power mode启用:phase命令:

:phase <phase>           set the implicit phase for power commands

我似乎找不到有关如何使用此命令的文档。例如,说我设置了parser编译器阶段

scala> :phase parser
Active phase is now: Parser

什么power命令已受它影响?如何调用这些受影响的电源命令?它与:settings -Xprint:parser有何不同?

scala read-eval-print-loop
1个回答
0
投票

该命令使您的代码评估为enteringPhase,这是使用intp.setExecutionWrapper完成的。您可以通过-Dscala.repl.debug见证包装。

它包装了REPL的“印刷”:

lazy val $print: _root_.java.lang.String = $line4.$read.$iw.$iw.$r.phased.atCurrent {

phased对象仅使调用适应enteringPhase

这是一个在以后的阶段中看到已擦除类型的示例:

scala> global.rootMirror.staticClass("scala.Option").typeSignature
res0: $r.global.Type =
[+A <: <?>]AnyRef
        with IterableOnce[A]
        with Product
        with Serializable {
  def <init>(): Option[A]
  final def isEmpty: Boolean
  final def isDefined: Boolean
  final override def knownSize: Int
  def get: A
  final def getOrElse[B >: A](default: => B): B
  final def orNull[A1 >: A](implicit ev: Null <:< A1): A1
  final def map[B](f: A => B): Option[B]
  final def fold[B](ifEmpty: => B)(f: A => B): B
  final def flatMap[B](f: A => Option[B]): Option[B]
  def flatten[B](implicit ev: A <:< Option[B]): Option[B]
  final def filter(p: A => Boolean): Option[A]
  final def filterNot(p: A => Boolean): Option[A]
  final def nonEmpty: Boolean
  final def withFilter(p: A => Boolean): Option.this.WithFilter
  class WithFilter extends AnyRef
  final def...

scala> global.rootMirror.staticClass("scala.Option").typeSignature.getClass
res1: Class[_ <: $r.global.Type] = class scala.reflect.internal.Types$PolyType

scala> :phase cleanup
Active phase is now: Cleanup

scala> global.rootMirror.staticClass("scala.Option").typeSignature.getClass
res2: Class[_ <: $r.global.Type] = class scala.reflect.internal.Types$ClassInfoType

scala> global.rootMirror.staticClass("scala.Option").typeSignature
res3: $r.global.Type =
Object
        with scala.collection.IterableOnce
        with Product
        with java.io.Serializable {
  def <init>(): Option
  final def isEmpty(): Boolean
  final def isDefined(): Boolean
  final override def knownSize(): Int
  def get(): Object
[snip]

由于调用了:type,所以REPL中的exitingTyper命令不受影响。

© www.soinside.com 2019 - 2024. All rights reserved.