【问题标题】:Scala Array map function documentation (PSSQ #1)Scala 数组映射函数文档 (PSSQ #1​​)
【发布时间】:2011-04-12 17:53:24
【问题描述】:

PSSQ 代表可能是愚蠢的 Scala 问题 :)

稍微了解一下 Scala,在强制性的 Hello World 示例(下面的代码)中,主函数的参数是一个字符串数组。

object HelloWorld
{
    def main(args: Array[String]): Unit = 
    {
        args.map((arg:String) => arg.toUpperCase());
        printf("%s %s!", "Hello", "World");
    }
}

在示例中,我在数组上使用map() 函数。但是,当我查看 Scala API 文档时,map() 并未列为可用于Array 的函数之一。是不是发生了某种魔法,还是我在 API 文档中遗漏了一些明显的东西?

【问题讨论】:

  • 不要对{ 使用这种风格的标识。把它放在声明的同一行,不管你做什么。您可能不喜欢它的外观,但它会为您省去麻烦。

标签: arrays scala implicit-conversion api-doc


【解决方案1】:

这是因为 Scala 的一项关键特性称为隐式转换。网上有很多关于它们的文档,例如看这个:http://www.codecommit.com/blog/scala/scala-for-java-refugees-part-6

即将推出的 Scala 2.9 REPL 可以帮助您找出其中可能涉及的内容:

scala> :implicits -v

...寻找数组,我们找到了几个指向mutable.ArrayOps 的数组。那个的scaladoc:http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/scala/collection/mutable/ArrayOps.html

这意味着,由于隐式转换方法 refArrayOps 在范围内(在默认的 Predef 中),每当您尝试调用 Array 上的方法时,该方法不是为 Array 定义的,而是为 @987654329 定义的@,scala 将插入(隐式)转换,因此您实际上有

Predef.refArrayOps(args).map(...)

【讨论】:

    【解决方案2】:

    简单的答案:map 实际上是Traversable trait 上的一个方法,它包含在Array 中。

    硬性答案:Array 不再真正扩展 Traversable (iirc),但是当在 Array 实例上调用 Traversable 方法时,会发生隐式转换以允许这样做上班。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2023-03-19
      • 2012-10-02
      • 2020-01-05
      • 2015-07-11
      • 1970-01-01
      相关资源
      最近更新 更多