2017-12-05 6 views
0

필자는 정적 형식 언어의 경우 런타임 전에 변수 형식을 "확인"한다는 것을 이해했습니다.고정 유형 언어에서 변수 유형이 영구적입니까?

나는 int 유형의 var이 유형 문자열이 될 수 없다는 의미입니다. 이것은 변수 유형이 프로그램 전체에서 (동일한 범위 내에서) (정적 유형 언어로) 변경할 수 없음을 의미합니까?

누군가 "가변 섀도우 잉 (shadowing)"에 대해 언급했지만 다른 스코프에만 적용된다는 것이 확실합니다. VAR 음영의

var i = 'hi'; 
function foo() { 
    var i = 1; 
} 

내 이해 전역에 ifoo 함수 범위 i 상이한 변수이고, 따라서 그들의 타입 (JS 안되는 정적 언어) 영구와 무관하다는 것이다. 그게 맞습니까?

+0

"정적"이란 무엇입니까? 마찬가지로, "동적"아닌가요? – AlexP

답변

1

누군가 "가변 섀도우 잉 (shadowing)"에 대해 언급했지만 다른 스코프에만 적용됩니다. 그것은 주장 할 수

fn main() { 
    let a: str = "hello"; 
    let a: i32 = 3; 
} 

:

그것은 "범위"의 당신의 정의에 따라

은, 녹, 예를 들어, 당신도 하나의 블록 내에서,에 대해 얘기하고 있다는 그림자의 종류를 할 수 있습니다 그림자 변수의 선언은 암시 적으로 이전 변수의 범위를 끝냅니다. 그러나 from the Rust book을 인용합니다 : 이름을 미행하는 변경하거나이 결합 된 가치를 파괴하고, 값이에 의해 더 이상 액세스 할 경우에도,이 범위를 벗어날 때까지 계속해서 존재하지 않습니다하지 않습니다

주 어떤 수단이든.

+0

그래서 정적 유형을 초보자에게 "영구 변수 유형"이라고 올바르게 설명하는 것은 올바르지 않습니까? 그것은 다소 다르지 만 예외가 있습니다 ... 저는 정적과 동적의 아주 간단한 정의를 만들려고합니다. – JBallin

+0

@JBallin - 정적 유형 지정에 대해 생각해 볼 수있는 더 좋은 방법은 표현식 유형이 컴파일러에 의해 모든 지점에서 알려져 있다는 것입니다. –

+0

확장 할 수 있습니까? 내 이해 런타임 이전에 어떤 시점에서 (인스턴트 메신저 형식 검사 실제로 때 혼란스러워 - https://stackoverflow.com/questions/47644075/when-are-variable-types-checked-in-a-statically -typed-language) 변수 유형을 검사 한 다음이를 기반으로 컴파일 된 코드를 최적화합니다. 내가 놓친 게 있니? – JBallin