복붙노트

[SCALA] 왜 스칼라 지원이 변수를 그림자는 무엇입니까? [닫은]

SCALA

왜 스칼라 지원이 변수를 그림자는 무엇입니까? [닫은]

그 그림자 변수를 사용하기에 너무 위험하다 생각합니다. 왜 스칼라는이 언어 구조를 지원합니까? 거기에 대한 몇 가지 강력한 이유가 있어야한다,하지만 난 그것을 찾을 수 없습니다.

해결법

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

    1.다른 변수에있어서, 또는이 내부의 범위에서 선언되는 동일한 이름의 유형이 불가능 적정 아우터 스코프 개체 참조면서 그림자라고 변수, 메소드 또는 유형 : 그냥 알리미 방법 (또는, 때로는 전혀). 스칼라, 그냥 자바처럼 그림자를 할 수 있습니다.

    다른 변수에있어서, 또는이 내부의 범위에서 선언되는 동일한 이름의 유형이 불가능 적정 아우터 스코프 개체 참조면서 그림자라고 변수, 메소드 또는 유형 : 그냥 알리미 방법 (또는, 때로는 전혀). 스칼라, 그냥 자바처럼 그림자를 할 수 있습니다.

    내가 볼 수있는 한 가지 가능한 이유는 스칼라, (예를 들어, Java 또는 C ++에 비해) 상대적으로 짧은 각각의 많은 중첩 된 범위를 가지고 자주 것입니다. 식이 따라서 새 범위를 시작, 예상되는 경우 실제로, 블록 어디서나 시작할 수 있습니다. 내부 범위에서 그림자 이름의 사용은 가까이 자신의 선언과 덜 모호한에, 평균, 따라서이다.

    또한, 인라인 폐쇄들은 이미 혼잡 범위에 새로운 변수 이름을 필요로하는 프로그래머를지도한다. 허용도 미행하는 대신 다른 이상한 이름을 발명, 그들은 알 이미 사용 된 이름과 동일한 경우에도, 지점 충분히 있습니다 설명하는 이름을 계속 사용 할 수 있습니다 - 내, 지역, 또는 (더 나쁜)로 접두어처럼 _ 또는 단일 -letter 이름 ...

    섀도 잉은 덜 좋은 십오 일에 문제가되는 예를 들어, 수 소스 코드의 선언, 그리고에 대한 참조, 커서 아래 변수를 강조 표시합니다.

    여기 그냥 내 두 센트 ...

  2. ==============================

    2.당신은 당신이 원하는대로 생각할 권리가 있습니다. 당신은 데이터, 연구 또는 이유를 제공하지 않았기 때문에 그러나, 그 의견은 값이 없습니다.

    당신은 당신이 원하는대로 생각할 권리가 있습니다. 당신은 데이터, 연구 또는 이유를 제공하지 않았기 때문에 그러나, 그 의견은 값이 없습니다.

    유용하기 때문이다. 프로그래머는 범위의 일부 식별자가 이미 그것을 사용해서 임의의 식별자 이름을 발명 할 필요가 없습니다.

    그것은 제 3자가 사용되는 식별자를 추가해서 파괴 컴파일의 기회를 제거로서 그것은뿐만 아니라 와일드 카드 수입이 더 유용합니다.

    왜에 대한 강한 이유가 있어야한다? 이 장점은 여기에 있으며, 단점 (당신이 아무도 제시하지 않음)의 부재에 그것으로 충분하다.

    편집하다

    단점에 대한 대답은 설명에서, 나는 그 그림자의 특별한 경우라고해야합니다. 또한 그림자는 동일한 패키지에 수입의 어느 import 문을 통해 또는 중첩 된 패키지 문을 통해 모든 것을, 그리고 모든 영향을 미칩니다.

    이제 몇 가지 예를 보자 :

    // Not allowed, because it shadows List
    import java.util._ 
    
    class A {
        // Not allowed, because it shadows this, hashCode, equals, toString
        class B
    }
    

    그것은 매우 성가신 언어로 만들 것입니다.

  3. from https://stackoverflow.com/questions/7031106/why-does-scala-support-shadow-variables by cc-by-sa and MIT license