【问题标题】:Canonical way for empty Array in Scala?Scala中空数组的规范方式?
【发布时间】:2018-01-31 16:42:24
【问题描述】:

在 Scala 中获取空数组的规范方法是什么? new Array[String](0) 太冗长了。

【问题讨论】:

    标签: scala


    【解决方案1】:
    Array[String]()
    

    如果可以推断出[String] 部分,您可以省略它(例如methodThatAlwaysTakesAStringArray( Array() ))。

    【讨论】:

    • 这个版本似乎创建了一个空序列并在该序列上调用Array.apply()。所以和new Array[String](0)不完全一样。
    • 您能解释一下为什么这比 'Array.empty[String]' 更可取吗?我发现下面的答案更好,因为它在阅读时不那么模棱两可。
    【解决方案2】:
    val emptyArray =  Array.empty[Type]
    

    【讨论】:

    • 当可以推断出类型时,这对我也有用:Array.empty
    【解决方案3】:

    Array() 在大多数情况下就足够了。它将是Array[Nothing] 类型。

    如果您使用隐式转换,您可能需要实际编写 Array[Nothing],因为Bug #3474

    def list[T](list: List[T]) = "foobar"
    implicit def array2list[T](array: Array[T]) = array.toList
    

    这行不通:

    list(Array()) => error: polymorphic expression cannot be instantiated to expected type;
        found   : [T]Array[T]
        required: List[?]
            list(Array())
                      ^
    

    这将:

    list(Array[Nothing]()) //Nothing ... any other type should work as well.
    

    但这只是隐含的一个奇怪的极端情况。以后这个问题很有可能会消失。

    【讨论】:

      【解决方案4】:

      如果数组类型是原语之一,您可以使用 scala.Array 中的快捷方式。

      例如对于一个字节数组,它将是:

      val arr = Array.emptyByteArray
      

      当无法推断类型并且您希望保持不那么冗长时,这很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-31
        • 2012-02-06
        相关资源
        最近更新 更多