【问题标题】:Scala equivalent of Python help()Scala 等价于 Python help()
【发布时间】:2013-07-08 22:03:45
【问题描述】:

我精通 Python,但在 Scala 方面是个菜鸟。我正要在 Scala 中编写一些肮脏的实验代码,并且想到如果 Scala 在 Python 中具有像 help() 这样的函数会非常方便。例如,如果我想查看 Scala Array 的内置方法,我可能想输入类似 help(Array) 的内容,就像我在 Python 中输入 help(list) 一样。 Scala 有这样的东西吗?

【问题讨论】:

  • REPL 中的制表符补全?

标签: python scala equivalent


【解决方案1】:

我不知道有什么内置的,但您应该使用Scaladocs 来查找相同的信息。

除非您使用 eclipse,它具有自动完成功能并带有简短的解释。例如,它会在输入“数组”后为您提供数组的所有命令。

【讨论】:

  • 谢谢!我还不确定如何使用 Scaladocs,但我会找到答案的。
  • 我通常做的只是谷歌方法和scaladocs。前几个链接中的一个将包含您要查找的内容。
【解决方案2】:

我认为制表符补全是最接近 Python 的帮助。

还有一个来自@dcsobral 的关于使用 Scala 文档的过时但仍然相关的post 和类似于 Hoogle for Haskell 的Scalex

这是ObjectArray中的制表符补全。

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  

虽然方法上的选项卡完成有时有点令人生畏,但会显示方法签名。这是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]  

【讨论】:

  • 制表符补全不会执行通过隐式添加的成员。然而,对我来说,tabbing 通常比 scaladoc 更容易(我想到了反射 api)。
  • Hmmm 选项卡完成似乎不如 Python 的 help() 优雅,但我想它可以达到它的目的。谢谢!
【解决方案3】:

sbt-man 是一个用于查找 scaladoc 的 sbt 插件。 sbt console 命令使用项目类和类路径上的依赖项启动 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. 

【讨论】:

    【解决方案4】:

    同样,IDEA 有其“快速文档查找”命令,该命令适用于 Scala 以及 Java (-Doc) JAR 和源代码文档 cmets。

    【讨论】:

      【解决方案5】:

      在 scala 中,您可以尝试使用以下 ..(类似于我们在 python 中的)..

      python 中的help(RDD1) 将为您提供包含完整详细信息的 rdd1 描述。

      Scala > RDD1.[tab]

      在点击选项卡时,您将找到指定 RDD1 可用的选项列表,类似于您在 eclipse 中找到的选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 2010-11-11
        相关资源
        最近更新 更多