2017-02-02 5 views
3

これは驚くほどドキュメント内で見つけるのは難しいです。コンパイラエラーメッセージの{整数}とは何ですか?

  1. {integer}特定のプリミティブ 種類の言語の別名のいくつかの並べ替えです:これも、2つのパートの質問かもしれませんか?

  2. コンパイル/構文エラーメッセージに、タイプ名を中括弧で囲むことはどういう意味ですか?

例:エラー・メッセージに

error: no method named pow found for type {integer} in the current scope

+2

関連する質問:[数値リテラルはデフォルトの型にいつ割り当てられますか?](http://stackoverflow.com/questions/39595782/when-are-numeric-literals-assigned-to-default-types) – ljedrz

答えて

8

{integer}は、具体的な型が指定されておらず、コンパイラによってまだ推論されていない整数値です。次のコード:

fn main() { 
    let x = 1; 
    let() = x; 
} 

は、次のエラーになります:

error[E0308]: mismatched types 

--> <anon>:3:9 
    | 
3 |  let() = x; 
    |   ^^ expected integral variable, found() 
    | 
    = note: expected type `{integer}` 
    = note: found type `()` 

同じフローティング数で起こる:コンパイル・エラーが原因であるため

fn main() { 
    let x = 1.0; 
    let() = x; 
} 
error[E0308]: mismatched types 
--> <anon>:3:9 
    | 
3 |  let() = x; 
    |   ^^ expected floating-point variable, found() 
    | 
    = note: expected type `{float}` 
    = note: found type `()` 

型の推論が発生する前に無効な割り当てlet() = xがスローされます。すなわち

、コンパイルが指定された具体的なタイプ無し整数または浮動小数点が認識されるであろう型推論ステージ(例えば、関数の適用に基づいて)に到達するか、デフォルトのタイプを割り当てられ、整数のi32とフロート用f64までコンパイルエラーは、それを{integer}または{float}として参照します。

+0

注: 'let()= x'の代入は、変数の型を決定するのに便利な方法です:[関連する質問](http://stackoverflow.com/questions/21747136/how-do-i-print-錆のあるタイプの錆)。 – ljedrz

+0

それは本質的に私がこのエラーに遭遇した方法です。私はちょうどハッシュマップから取得した値を指数化しようとしていたが、そのハッシュマップ(Rust Koansを通して働いている)に数値リテラルを挿入し、コンパイラに何の特定の数値型を使うべきか情報を与えなかった。これらの値を任意のタイプに強制して、どのタイプのコードを作成しようとしているのか把握してください。パズルのもう1つの部分が所定位置に収まります。 –

7

{integer}は整数型({i,u}{8,16,32,64,128})の任意のプレースホルダーです。 (Source

錆の整数リテラルは、その用途に基づいて型推論されます。たとえば、次のコードでは、123の種類は、第二の最初のインスタンスでu8u64である:

let a: u8 = 123; 
let a: u64 = 123; 

{integer}コンパイラを考え出していない場合、エラーメッセージ内の任意の整数型を表すために使用され値の具体的な型。

関連する問題