【问题标题】:how to use scala api document?如何使用 scala api 文档?
【发布时间】:2012-03-21 02:43:19
【问题描述】:

我看过 args.foreach(arg => println(arg)),但是当我搜索文档 http://www.scala-lang.org/api/current/index.html#scala.Array 时。我在那里找不到它及其伴随对象文档。

有什么建议吗? 谢谢

【问题讨论】:

  • scalex 在这种情况下可以提供帮助。
  • 这也是我在这个网站上的第一个 Scala 问题...stackoverflow.com/questions/6131309/scala-arrays-vs-vectors。文档确实需要一个选项来显示预定义隐式中可用的所有方法(或者可能是隐藏它们的选项)。 scalex 也不这样做,所以没有帮助,除非您已经知道 ArrayOps 的隐含(在这种情况下,您可以查找普通的 API 文档)

标签: scala


【解决方案1】:

Arrayscala.collection.mutable.ArrayOps 获取诸如 foreach 之类的操作 - 因此您可以在文档中查找 ArrayOps 以查看数组上可用的方法。

Predef 包含许多隐式转换方法,使它们可用于数组。

不幸的是,您无法在 Array 的 Scala API 文档中看到这些方法可通过 Predef 中的隐式函数获得。

【讨论】:

    【解决方案2】:

    正如 Jesper 所说,要找到有关通过隐式转换获得的方法的文档并不容易。 here 解释了为 Array 定义的那些及其背后的基本原理。

    找出特定方法来自何处(在像您这样的情况下,它来自隐式转换)的一种(不是特别方便...)一般方法是使用 scala REPL 的 -print 选项。

    如果你运行scala -print,你会得到:

    scala> Array(1,2,3,4)
    // ..... omitted for brevity
    res0: Array[Int] = Array(1, 2, 3, 4)
    
    scala> res0 foreach (println)
    [[syntax trees at end of cleanup]]// Scala source: <console>
    package $line2 {
      final object $read extends java.lang.Object with ScalaObject {
        def this(): object $line2.$read = {
          $read.super.this();
          ()
        }
      };
      @SerialVersionUID(0) final <synthetic> class $read$$iw$$iw$$anonfun$1 extends
    scala.runtime.AbstractFunction1 with Serializable {
        final def apply(x: java.lang.Object): Unit = scala.this.Predef.println(x);
        final <bridge> def apply(v1: java.lang.Object): java.lang.Object = {
          $read$$iw$$iw$$anonfun$1.this.apply(v1);
          scala.runtime.BoxedUnit.UNIT
        };
        def this(): anonymous class $read$$iw$$iw$$anonfun$1 = {
          $read$$iw$$iw$$anonfun$1.super.this();
          ()
        }
      };
      final object $read$$iw$$iw extends java.lang.Object with ScalaObject {
        private[this] val res1: scala.runtime.BoxedUnit = _;
        <stable> <accessor> def res1(): Unit = ();
        def this(): object $line2.$read$$iw$$iw = {
          $read$$iw$$iw.super.this();
          $read$$iw$$iw.this.res1 = {
            scala.this.Predef.intArrayOps($line1.$read$$iw$$iw.res0()).foreach({
              {
                (new anonymous class $read$$iw$$iw$$anonfun$1(): Function1)
              }
            });
            scala.runtime.BoxedUnit.UNIT
          };
          ()
        }
      };
      final object $read$$iw extends java.lang.Object with ScalaObject {
        def this(): object $line2.$read$$iw = {
          $read$$iw.super.this();
          ()
        }
      }
    }
    
    [[syntax trees at end of cleanup]]// Scala source: <console>
    package $line2 {
      final object $eval extends java.lang.Object with ScalaObject {
        @volatile protected var bitmap$0: Int = 0;
        <stable> <accessor> lazy def $result(): Unit = {
          if ($eval.this.bitmap$0.&(1).==(0))
            {
              $eval.this.synchronized({
                if ($eval.this.bitmap$0.&(1).==(0))
                  {
                    {
                      $eval.this.$print();
                      $line2.$read$$iw$$iw.res1()
                    };
                    $eval.this.bitmap$0 = $eval.this.bitmap$0.|(1);
                    ()
                  };
                scala.runtime.BoxedUnit.UNIT
              });
              ()
            };
          ()
        };
        private[this] val $print: java.lang.String = _;
        <stable> <accessor> def $print(): java.lang.String = $eval.this.$print;
        def this(): object $line2.$eval = {
          $eval.super.this();
          $eval.this.$print = {
            $line2.$read$$iw$$iw;
            ""
          };
          ()
        }
      }
    }
    
    1
    2
    3
    4
    

    如果您在此代码中查找 .foreach,您会找到相关行,它告诉您该方法实际上是在 intArrayOps 上调用的:

    scala.this.Predef.intArrayOps($line1.$read$$iw$$iw.res0()).foreach(
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-28
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2020-12-12
      • 2011-10-09
      • 2014-09-13
      相关资源
      最近更新 更多