복붙노트

[SCALA] 왜이 REPL에서 같은 이름의 변수를 선언 할 수있다?

SCALA

왜이 REPL에서 같은 이름의 변수를 선언 할 수있다?

scala> val hi = "Hello \"e"
hi: String = Hello "e


scala> val hi = "go"
hi: String = go

그 날 같은 이름을 가진 변수 인사를 선언 할 수 있도록 왜 같은 REPL 세션 내에서?

scala> hi
res1: String = go

scala> hi="new"
<console>:8: error: reassignment to val
   hi="new"
     ^

이 오류 난 우리가 할 수없는 재 할당 발 이해

해결법

  1. ==============================

    1.REPL의 흥미로운 디자인 기능은 두 개의 정의가로 번역되어 있습니다 :

    REPL의 흥미로운 디자인 기능은 두 개의 정의가로 번역되어 있습니다 :

    object A {
      val greeting = "hi"
    }
    object B {
      val greeting = "bye"
    }
    

    후속 사용은 마지막 정의를 가져옵니다 :

    object C {
      import B.greeting
      val message = s"$greeting, Bob."  // your code
    }
    

    당신은 스칼라 -Xprint와 정확한 배치 전략을 목격 할 수 있습니다 파서 :

    object $iw extends scala.AnyRef {
      def <init>() = {
        super.<init>();
        ()
      };
      import $line4.$read.$iw.$iw.greeting;
      object $iw extends scala.AnyRef {
        def <init>() = {
          super.<init>();
          ()
        };
        val message = StringContext("", ", Bob.").s(greeting)
      }
    }
    
  2. ==============================

    2.코드의 첫 번째 부분에서 나는이 안녕하세요 당신의 재정의 허용 REPL의 "기능"믿습니다. 당신이 REPL에서 코드의 작은 조각을 구축을 통해 작업하는 가정 다음 돌아가서 다른 값을 사용하여 다른 사람을 다시 작성하지 않고 이전의 정의를 변경하는 것이 도움이 될 수 있습니다.

    코드의 첫 번째 부분에서 나는이 안녕하세요 당신의 재정의 허용 REPL의 "기능"믿습니다. 당신이 REPL에서 코드의 작은 조각을 구축을 통해 작업하는 가정 다음 돌아가서 다른 값을 사용하여 다른 사람을 다시 작성하지 않고 이전의 정의를 변경하는 것이 도움이 될 수 있습니다.

    다음 코드는 오류 오류를 줄 것이다 : scalac로 컴파일 할 때 X가 이미 x 값으로 정의된다.

    class Foo{
      val x = "foo"
      val x = "foo"
    }
    

    코드의 두 번째 부분에서 당신은 변경할 수없는 발을 재 할당하려고합니다. 이것은 당신이 기대하는 것입니다.

  3. from https://stackoverflow.com/questions/22772320/why-is-it-possible-to-declare-variable-with-same-name-in-the-repl by cc-by-sa and MIT license