gpt4 book ai didi

scala - 从 scala repl 查看 中的内容

转载 作者:行者123 更新时间:2023-12-03 20:08:41 25 4
gpt4 key购买 nike

我可以在 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里面生成了什么代码!

最佳答案

不如same functionality in, say, clojure方便,因为它显示了编译后的代码,但您可以利用 :javap :

scala> :javap -help
usage :javap [opts] [path or class or -]...
-help Prints this help message
-raw Don't unmangle REPL names
-app Show the DelayedInit body of Apps
-fun Show anonfuns for class or Class#method
-verbose/-v Stack size, number of locals, method args
-private/-p Private classes and members
-package Package-private classes and members
-protected Protected classes and members
-public Public classes and members
-l Line and local variable tables
-c Disassembled code
-s Internal type signatures
-sysinfo System info of class
-constants Static final constants

scala> :javap -s a
Compiled from "<console>"
public class {
public static final MODULE$;
descriptor: L;
public static {};
descriptor: ()V

public scala.Function1<java.lang.Object, java.lang.Object> a();
descriptor: ()Lscala/Function1;

public ();
descriptor: ()V
}

或指示 REPL 在编译时输出代码内部结构 scala -Xprint:typer (虽然它可能过于冗长,但也许有人可以建议使用不那么冗长的编译器阶段)。

顺便说一句,正如您在 :javap 输出中看到的,每个 REPL 表达式都隐式地包含在周围的代码中,不要混淆——scala 不会正常执行它。

关于scala - 从 scala repl 查看 <function1> 中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com