【问题标题】:how to pass and return an array in scala如何在scala中传递和返回一个数组
【发布时间】:2021-05-06 10:06:47
【问题描述】:

我为这个问题的基本性道歉,但无论如何这是我的第一个 scala 项目,我试图做的只是将一个数组传递给一个函数并返回该函数。这是我所拥有的:

 def main(args: Array[String]): Unit = {
    // 9999 == infinite there should be no reason
    // that for the scope of this assignment there
    // there should be a value any bigger than this.
    var Nodes = 4;
    var infi = 9999;
    var pathTaken = Array(Nodes);
    var pathLens = Array(Nodes);
    var paths = Array(Nodes, Nodes);
    
    pathLens = lenInit(pathLens);
}

def pathLens(x : Array[4]): Unit = {
    x = (0, 0, 0, 0);
    return x;
} 

我知道这是超级基本和简单的,但我一生都是 C/python 人,到目前为止,我一直在搜寻互联网,但毫无结果。请帮助/指出正确的方向,非常感谢!

【问题讨论】:

  • 第一点:您似乎将Unit 指定为返回类型。您应该让编译器找出来(因此删除: Unit 部分)或设置您期望的正确类型。

标签: arrays scala


【解决方案1】:

您能做的最好的事情就是在尝试练习之前停下来尝试学习一些基本的 scala 语法。我能给你推荐几个学习 Scala 的好资源吗?

书:

视频教程:

互动教程:

答案是 OOT,但我认为在这种情况下,值得向这些资源发出信号。

【讨论】:

    【解决方案2】:

    假设您的意图是该函数被称为 lenInit 而不是 pathLens?

    无论如何,要创建一个所有设置为 0 的 4 个整数的数组,请使用 Array.fill:

    Array.fill[Int](4)(0)
    

    您实际上并不需要一个 init 函数,并且可以推断类型,所以只需这样做:

    val pathLens = Array.fill(Nodes)(0)
    

    更多Array initializing in Scala查看此答案

    要将数组传递给函数,您需要参数化数组的类型,例如:

    def foo(x: Array[Int]) .........
    

    【讨论】:

    • 这是一个公平的观点,但是我仍然需要在这个任务中进一步使用我的数组的函数你能帮我解决如何传递数组吗?
    • 如何在现有阵列上使用 .fill 命令?我看到您在初始化数组时使用了它,但是我如何使用它将数组重置为零?
    • @itsMe re。 “如何将数组重置为零”:不要。只需创建一个新的。在 scala 中,如果根本需要改变现有结构,你真的应该很少。虽然数组作为从 java 继承的返祖实际上是可变的,但最好假装它们不是。只需习惯使用不可变结构即可。这就是“斯卡拉方式”。另外,我支持 Tonio Gela 在另一个答案中给您的建议:您现在编写代码似乎还为时过早。你应该先学习一些基本的语法。
    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 2022-01-26
    • 2017-03-27
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多