2013-10-08 65 views
2

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

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。有什么我失踪的?我注意到没有关于全局变量的doc/tutorial,所以我认为在SCALA中基本上没有叫做全局变量的概念。那么,在Scala中如何处理全局变量的概念呢?

+0

请下次尝试改进你的代码格式:)这是一种很难阅读。 – fresskoma

+0

您的myDict是一个全局变量。它可以被其他类引用为'Scala_Object.myDict'。并且'Scala_Object'也是一个全局变量。 – Madoc

回答

4

你的例子应该工作正常。如果出现问题,它似乎不在您发布的代码中。请注意,由于您不想重新分配,因此您的myDict不需要为var。该varval关键字在Scala中没有提及被引用的对象或类实例,但是到了引用,例如:

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_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) 
+0

干净的答案!谢谢。 – Learner