2017-11-12 7 views
0

私は単純な内部クラス変数を持っていますが、スカラーでどのようにアクセスしますか?スカラーの内部クラス要素にアクセスする方法

class Outer { 
    class Inner { 
    var x = 1 
    }} 


object Main { 
    def main(args: Array[String]): Unit = { 
    val o = new Outer 
    val i = new o.Inner 
    println(i.x) 
    } 
} 

問題はIntelliJがxを解決できないと言うことですが、プログラムを実行すると問題なく動作します。 enter image description here

+0

を動作するはず? –

答えて

1

.member_nameを使用すると、scalaの変数にアクセスできます。

scala> class Outer { 
     class Inner { 
      var x = 1 //it can be val which is immutable 
     }} 
defined class Outer 

scala> val o = new Outer 
o: Outer = [email protected] 

scala> val i = new o.Inner 
i: o.Inner = [email protected] 

scala> i.x 
res13: Int = 1 

あなたの例では、X可変として定義されているので、あなたがxの値を変更することができ、

scala> i.x = 100 
i.x: Int = 100 

scala> i.x 
res14: Int = 100 

実施例を参照してください - あなたが本当に外を必要としない場合https://scastie.scala-lang.org/prayagupd/C9k9an4ASdaISnohbYQBmA

をクラスにするには、シングルトンとして定義することができます。

scala> object Outer { 
    |    class Inner { 
    |    var x = 1 //it can be val which is immutable 
    |    }} 
defined object Outer 

その後、IntelliJの、File | Invalidate Caches/Restart...に取り組んでいないについては、単純なインスタンス化インナーとアクセス変数、

scala> val inner = new Outer.Inner 
inner: Outer.Inner = [email protected] 

scala> inner.x 
res2: Int = 1 

はのprintln(i.x)と間違って何

+0

これは簡単ですが、なぜこれがIntelliJで動作しないのかを教えてください。ありがとう – Srinivas

+0

例は明らかに動作する例です。 REPLを試して、スカラの小さなものを学ぶのを助けてください。あなたはintellijにどんなエラーがありますか?またはintellijはxを表示します。あなたの質問を – prayagupd

+0

あなたの例では、あなたの例では 'i'ではなく、' i.x'を印刷しています – prayagupd

関連する問題