3

私は 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 に追加されます。不足しているものはありますか? グローバル変数に関するドキュメント/チュートリアルがないことに気がついたので、SCALA には基本的にグローバル変数という概念はないと思います。では、Scala ではグローバル変数の概念はどのように扱われるのでしょうか。

4

1 に答える 1

4

あなたの例はうまくいくはずです。問題がある場合は、投稿したコードにはないようです。補足として、あなたはそれを再割り当てしたくないのでmyDict、である必要はありません。varScalaのvarandvalキーワードは、参照されるオブジェクトまたはクラス インスタンスではなく、参照を参照します。次に例を示します。

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_ObjectScala コンソールでテストする方法は次のとおりです。

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)
于 2013-10-08T07:21:16.433 に答える