2013-10-08 6 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]]) добавляется диктофон. Есть что-то, что мне не хватает? Я заметил, что нет документа doc/tutorial по глобальным переменным, поэтому я предполагаю, что в принципе нет понятия Global variables в SCALA. Затем, как понятие глобальных переменных обрабатывается в Scala?

+0

Пожалуйста, попытайтесь улучшить форматирование кода в следующий раз :) Это было трудно прочитать. – fresskoma

+0

Ваш 'myDict' - глобальная переменная. На другие классы можно ссылаться как «Scala_Object.myDict». И в некотором смысле 'Scala_Object' также является глобальной переменной. – Madoc

ответ

4

Ваш пример должен работать нормально. Если есть проблема, это не похоже на код, который вы опубликовали. В качестве примечания стороны, ваш myDict не обязательно должен быть var, так как вы не хотите повторно назначать его. В var и val ключевые слова в 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:

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

Смежные вопросы