Scala中的全局变量

时间:2013-10-08 06:53:13

标签: scala dictionary functional-programming

我是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]])的元素被添加到dict - myDict中。有什么我想念的吗?我注意到没有关于全局变量的doc / tutorial,所以我认为在SCALA中根本没有称为全局变量的概念。然后,在Scala中如何处理全局变量的概念?

1 个答案:

答案 0 :(得分:4)

你的例子应该可以正常工作。如果出现问题,它似乎不在您发布的代码中。另外,您的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)