当前位置: 首页 > 知识库问答 >
问题:

如何将Scala数组传递到Scala vararg方法中?

鲜于浩淼
2023-03-14

考虑以下代码:

private def test(some:String*){

}

private def call () {
  val some = Array("asd", "zxc")
  test(some)
}

它打印expect String,找到Array[String]Why?Scala变量不是数组吗?

笔记

我在堆栈溢出上发现了几个关于斯卡拉变量的问题,但所有这些问题都是关于调用Java varargs方法或将Scala列表转换为数组的。

共有3个答案

云弘壮
2023-03-14

从 Scala 2.13.0 开始,如果你使用一些:_*,你会收到这个警告:

不推荐将显式数组值传递给Scalavarargs方法(因为2.13.0>),这将导致防御性拷贝;使用更高效的非复制ArraySeq。unsafeWrapArray或显式toIndexedSeq调用

按照建议,使用 scala.collection.im可变.ArraySeq.unsafe包装数组

unsafeWrapArray(some):_*

另外,你应该得到的另一个警告是这个

过程语法已弃用:改为添加:Unit=以显式声明test's返回类型

要解决此问题,请在函数的左括号前添加 =

def test(some:String*) = {

花玄裳
2023-03-14

很简单:

def test(some:String*){}

def call () {
  val some = Array("asd", "zxc")
  test(some: _*)
}
宰父单弓
2023-03-14

将< code>:_*附加到< code>test中的参数,如下所示

test(some:_*)

它应该像你期望的那样工作。

如果你想知道那个神奇的:_*有什么作用,请参考这个问题。

 类似资料:
  • 问题内容: 如何将整个数组传递给方法? 如何正确执行此操作? 问题答案: 你做这个: 只需将其作为其他任何变量传递即可。 在Java中,数组是通过引用传递的。

  • 问题内容: 码: 当我尝试: 我在Eclipse中收到错误。 但当: 一切都好。为什么会有这种差异?谢谢。 问题答案: 因为语法是特殊的语法糖,仅在初始化数组变量时才适用。这是因为任务本身缺少类型信息;但是在赋值的特殊情况下,类型是从变量中完全推断出来的。 在第一个示例中,编译器知道您要分配给它(是),因此允许使用此语法。在后者中,您无需初始化变量(并且由于Java类型推断的弱点,它甚至也无法完全

  • 问题内容: 好的,所以我想将一个非常基本的数组传递到jquery数据attrubute服务器端,如下所示: 然后像这样回撤: 为什么这似乎会警告’[‘而不是’a’(请参阅JSfiddle链接) JSFiddle链接: http : //jsfiddle.net/ktw4v/3/ 问题答案: 它将变量视为字符串,其第零个元素为。 发生这种情况是因为您的字符串不是有效的JSON,它应使用双引号而不是单

  • 这是我的第一个Java应用程序。我正在尝试创建一个产品(键)和它们的价格(值)的地图。文档上说我不能用doubles换钱,所以我得用bigdecimal。我现在完全不知道如何在我的方法和地图中使用BigDecimal。 寄存器类: 主类:

  • 如何在JSP中分别显示id、txtfile和语句?如何将arraylist从servlet传递到JSP。 JSP:如何编辑我的JSP。我的JSP出现错误: 类型安全:未经检查的objectto arraylist强制转换

  • 问题内容: 基本上我有一个ArrayList的位置: 在此之下,我调用以下方法: getMap()方法中的参数为: 我遇到的问题是我不确定如何在整个方法列表中传递该方法。 我试过了 但是getMap不接受,因为它不接受Objects []。 现在,如果我使用 它会完美地工作…但是我需要以某种方式传递所有位置…我当然可以继续添加等等,但是数组的大小会有所不同。我只是不习惯整个概念 最简单的方法是什么