2017-12-05 22 views
0

私の理解では、静的型付け言語の実行時には、変数型は実行前に「チェック」されています。変数型は静的型言語で永続的ですか?

これは、int型のvar型はstring型ではないことを意味すると思いますか?これは、変数型が(静的に型指定された言語で)プログラム全体で(同じスコープ内で)変更できないことを意味しますか?

誰かが「可変シャドーイング」について言及しましたが、私はかなり異なるスコープにしか当てはまらないと確信しています。

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

のvarシャドウイングの私の理解では、グローバルスコープでifoo関数スコープでiとは異なる変数であるため、その種類は永久と無関係(JSではない静的な言語で)であるということです。そうですか?

+0

「静的」とはどういう意味ですか?ではなく、「動的」ですか? – AlexP

答えて

1

誰かが「可変シャドウイング」について言及しましたが、私はかなり異なるスコープにしか当てはまらないと確信しています。

それは錆は、たとえば、あなたも、単一のブロックの中に、話をしていることをシャドウイングの種類を可能にする、「スコープ」のあなたの定義に依存:

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

それは主張することができshadow変数の宣言が前の変数のスコープを暗黙的に終了することを示します。しかし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

関連する問題