2016-11-26 22 views
1

main.rsstd::f64::NEG_INFINITYと参照できますが問題ありません。しかし、別のモジュールが同じ定数を参照すると、コンパイラはUse of undeclared type or module 'std::f64'という文句を言います。スタンダードライブラリのモジュールを使用すると、私のクレートルートで動作しますが、モジュールでは動作しません

はここに私のmain.rsである:ここでは

mod bar; 

fn main() { 
    println!("{}", std::f64::NEG_INFINITY); 
} 

である私のbar.rs

fn foo() { 
    println!("{}", std::f64::NEG_INFINITY); 
} 

main.rsbar.rsが同じフォルダ内にあります。

私は間違っていますか?

答えて

1

別々のファイルは必要ありません。ここでの再現です:

fn main() {} 

mod bar { 
    fn foo() { 
     println!("{}", std::f64::NEG_INFINITY); 
    } 
} 

あなたのクレートのルートで、stdクレートは自動的にthe preludeの一部としてインポートされています。これは、のパスstdをルートから挿入して挿入します。

ただし、モジュールでコードを書き始めると、ルートにはなくなります。アイテムを使用しようとすると、パスはデフォルトで相対パスになります。したがって、mod barの内部では、パスstd::f64::NEG_INFINITYは絶対パス::bar::std::f64::NEG_INFINITYであり、存在しません。

次の2つの主要な方法でこの問題を解決することができます。

  1. use std;ステートメントを使用してスコープにパスを持参してください。 このステートメントは、デフォルトで絶対パスを使用するため、このstd::stdです。

  2. 各使用法で絶対パスを指定してください:println!("{}", ::std::f64::NEG_INFINITY)

関連する問題