Scala中类似于Python help()的函数

11

我精通Python,但对Scala还是个新手。我正准备用Scala编写一些不规范的实验代码,突然想到如果Scala有像Python中的help()函数那就太方便了。例如,如果我想查看Scala Array的内置方法,我可能想要键入类似于help(Array)的内容,就像在Python中键入help(list)一样。Scala中是否存在这样的函数?


1
REPL 中的制表符自动补全? - kiritsuku
5个回答

5
我认为Tab键自动补全是最接近Python帮助文档的功能之一。
此外,还有一个过时但仍然相关的@dcsobral的文章介绍了如何使用Scala文档和类似于Haskell的Hoogle的Scalex
这是在Object数组中的Tab键自动补全功能。
scala> Array.
apply                  asInstanceOf           canBuildFrom           concat                 copy                   
empty                  emptyBooleanArray      emptyByteArray         emptyCharArray         emptyDoubleArray       
emptyFloatArray        emptyIntArray          emptyLongArray         emptyObjectArray       emptyShortArray        
fallbackCanBuildFrom   fill                   isInstanceOf           iterate                newBuilder             
ofDim                  range                  tabulate               toString               unapplySeq   

这是关于Array类的方法。不确定为什么在a.后面没有显示值成员。
scala> val a = Array(1,2,3)
a: Array[Int] = Array(1, 2, 3)

scala> a.
apply          asInstanceOf   clone          isInstanceOf   length         toString       update  

有时候,尽管有些让人望而却步,但在方法上使用Tab键补全会显示方法签名。以下是Array.fill的示例:

def fill[T](n1: Int, n2: Int)(elem: => T)(implicit evidence$10: reflect.ClassTag[T]): Array[Array[T]]                                                   
def fill[T](n1: Int, n2: Int, n3: Int)(elem: => T)(implicit evidence$11: reflect.ClassTag[T]): Array[Array[Array[T]]]                                   
def fill[T](n1: Int, n2: Int, n3: Int, n4: Int)(elem: => T)(implicit evidence$12: reflect.ClassTag[T]): Array[Array[Array[Array[T]]]]                   
def fill[T](n1: Int, n2: Int, n3: Int, n4: Int, n5: Int)(elem: => T)(implicit evidence$13: reflect.ClassTag[T]): Array[Array[Array[Array[Array[T]]]]]   
def fill[T](n: Int)(elem: => T)(implicit evidence$9: reflect.ClassTag[T]): Array[T]  

Tab键自动补全无法识别通过implicit添加的成员。然而,对于我来说,按Tab键通常比使用Scaladoc更容易(反射API浮现在脑海中)。 - som-snytt
嗯,选项补全似乎不如Python的help()优雅,但我想它能够达到其目的。谢谢! - Ray

5
我不知道是否有内置方法,但你可以使用Scaladocs来查找相同的信息。
除非你使用自带简短解释的eclipse。例如,只需键入'array.',它将为您提供关于数组的所有命令。

谢谢!我还不确定如何使用Scaladocs,但我会找出来的。 - Ray
我通常做的就是谷歌方法和Scaladocs。前几个链接中就会有你要找的内容。 - brebs

2

sbt-man 是一个用于查找 Scaladoc 的 sbt 插件。使用 sbt console 命令能够在 classpath 上启动 Scala REPL 并加载项目类和依赖。

示例:

man Traversable /:
[man] scala.collection.Traversable
[man] def /:[B](z: B)(op: (B  A  B)): B
[man] Applies a binary operator to a start value and all elements of this
collection, going left to right. Note: /: is alternate syntax for foldLeft;
z /: xs is the same as xs foldLeft z. Note: will not terminate for infinite-
sized collections. Note: might return different results for different runs,
unless the underlying collection type is ordered. or the operator is
associative and commutative. 

1
同样地,IDEA有它的“快速文档查找”命令,可以用于Scala以及Java (-Doc) JARs和源代码文档注释。

0
在Scala中,您可以尝试使用以下内容(类似于Python中的内容):
在Python中,使用help(RDD1)将会给出完整的RDD1描述和详细信息。
在Scala中,输入RDD1.[tab]后按下Tab键,您将找到指定RDD1可用选项的列表,类似于Eclipse中的选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接