gpt4 book ai didi

scala - Scala 中的全局变量

转载 作者:行者123 更新时间:2023-12-04 02:44:05 27 4
gpt4 key购买 nike

我是 Scala 和函数式编程的新手。我正在尝试像这样在 main() 函数中使用全局变量的功能,

object Scala_Object {

var myDict = scala.collection.mutable.Map[String,String]()

def str_rev(s : String) : String = {
myDict.put(s,s.reverse)
return (s.reverse)
}

def main (args: Array[String]){
..
..
val result = parsedArray.map(line => line.map { word =>
if( word == "") word
else if(word == line(2) || word == line(3)) str_rev(word)
else if ( word == line(1) || word == line(26)) str_rev(word)
else word})
}

在我的程序结束时,只有来自 parsedArray(这是一个 Array[Array[String]])的第一行中的元素被添加到字典 - myDict。有什么我想念的吗?我注意到没有关于全局变量的文档/教程,所以我认为 SCALA 中基本上没有称为全局变量的概念。那么,Scala 中如何处理全局变量的概念呢?

最佳答案

您的示例应该可以正常工作。如果有问题,它似乎不在您发布的代码中。作为旁注,您的 myDict 不需要是 var 因为您不想重新分配它。 Scala 中的 varval 关键字指的不是被引用的对象或类实例,而是引用,例如:

val x = 5
x = 6 // This will fail, reassignment to val

var y = 3
y = 5 // This works

val z = mutable.Map[String,String]()
z.put("foo", "bar") // This works because the reference is not modified
z = mutable.Map[String,String]() // This fails

以下是在 Scala 控制台上测试 Scala_Object 的方法:

scala> :paste
// Paste the code of your Scala_Object here
// And press Ctrl-D

defined module Scala_Object

scala> Scala_Object.myDict
res1: scala.collection.mutable.Map[String,String] = Map()

scala> ScalaObject.str_rev("foo")
res4: String = oof

scala> ScalaObject.myDict
res5: scala.collection.mutable.Map[String,String] = Map(foo -> oof)

scala> ScalaObject.str_rev("lol")
res6: String = lol

scala> ScalaObject.myDict
res7: scala.collection.mutable.Map[String,String] = Map(lol -> lol, foo -> oof)

关于scala - Scala 中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19241006/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com