静态类型语言中的变量类型是永久的吗?

时间:2017-12-05 00:00:38

标签: variables types

我的理解是在静态类型语言的运行时之前“检查”变量类型。

我认为这意味着int类型的int不能是字符串类型?这是否意味着变量类型在整个程序中不能改变(在同一范围内)(采用静态类型语言)?

有人提到“变量阴影”,但我很确定它只适用于不同的范围。

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

我对var阴影的理解是全局范围中的ii函数范围中的foo不同,因此它们的类型是永久的且不相关的(在静态中)语言,JS不是)。是吗?

1 个答案:

答案 0 :(得分:1)

  

有人提到"变量阴影"但我很确定这只适用于不同的范围。

这取决于你对"范围"的定义,例如,Rust允许你正在谈论的那种阴影,即使在一个块内:

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

可以认为,影子变量的声明隐含地结束了前一个变量的范围。但引用from the Rust book

  

请注意,遮蔽名称不会改变或破坏它所绑定的值,并且该值将继续存在,直到它超出范围,即使它无法通过任何方式访问。