加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

从scala repl中查看内容

发布时间:2020-12-16 09:19:58 所属栏目:安全 来源:网络整理
导读:我可以在scala repl中创建匿名函数: scala val a = (x: Int) = x * xa: Int = Int = function1 但是,有没有看到内部创建之后? 我正在考虑我将要执行一个功能并返回一个功能的情况.我只是好奇地看到repl创建的返回值,而不仅仅是返回的值的类型,所以像这样:
我可以在scala repl中创建匿名函数:

scala> val a = (x: Int) => x * x
a: Int => Int = <function1>

但是,有没有看到内部创建之后?

我正在考虑我将要执行一个功能并返回一个功能的情况.我只是好奇地看到repl创建的返回值,而不仅仅是返回的值的类型,所以像这样:

scala> val b = (f: (Int => Boolean)) => (x: Int) => ! (f(x))
b: (Int => Boolean) => (Int => Boolean) = <function1>

scala> val c = b((x: Int) => x % 2 == 0)
c: Int => Boolean = <function1>

我想看看在c里面生成了什么代码!

解决方法

这是在REPL之外完成的,但您可以使用-print选项使用scalac编译代码.做scalac -help会给你这个选项的描述:

-print        Print program with Scala-specific features removed.

我试过这个小程序:

object Test {
    def main(args: Array[String]): Unit = {
        val a = (x: Int) => x * x
    }
}

它给了我这个输出:

$scalac -print Test.scala
[[syntax trees at end of                   cleanup]] // Test.scala
package <empty> {
  object Test extends Object {
    def main(args: Array[String]): Unit = {
      val a: Function1 = {
        (new <$anon: Function1>(): Function1)
      };
      ()
    };
    def <init>(): Test.type = {
      Test.super.<init>();
      ()
    }
  };
  @SerialVersionUID(value = 0) final <synthetic> class anonfun$1 extends scala.runtime.AbstractFunction1$mcII$sp with Serializable {
    final def apply(x: Int): Int = anonfun$1.this.apply$mcII$sp(x);
    <specialized> def apply$mcII$sp(x: Int): Int = x.*(x);
    final <bridge> <artifact> def apply(v1: Object): Object = scala.Int.box(anonfun$1.this.apply(scala.Int.unbox(v1)));
    def <init>(): <$anon: Function1> = {
      anonfun$1.super.<init>();
      ()
    }
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读