2015-06-15 16 views
7

Tôi đang cố gắng sử dụng Mul từ core.Tại sao tôi cần sử dụng self :: core :: ops?

này được đề xuất bởi trình biên dịch và các công trình:

extern crate core; 

use self::core::ops::Mul; 

nhưng tại sao không

extern crate core; 

use core::ops::Mul; 

làm việc?

tôi nhận được lỗi error: unresolved import `core::ops::Mul`. Did you mean `self::core::ops`?

+4

Tại sao không sử dụng std :: ops :: Mul'? – mdup

+2

@mdup bởi vì trình biên dịch cho biết 'lõi' và đây là một phần không rõ ràng của Rust :-( – Shepmaster

Trả lời

11

An extern crate x; tải x vào không gian tên hiện tại. Các câu lệnh use là đường dẫn tuyệt đối trừ khi chúng bắt đầu bằng self::, vì vậy nếu bạn đặt extern crate core; ở bất kỳ đâu nhưng gốc thùng thì bạn cần chỉ định đường dẫn tuyệt đối hoặc sử dụng self::.

mod foo { 
    mod bar { 
     extern crate core; 
     use foo::bar::core::ops::Mul; 
     // or `use self::core::ops::Mul;` 
     // or even `use super::bar::core::ops::Mul;` if you’re mad 
     // but not `use core::ops::Mul;`. 
    } 
} 

… nhưng theo nguyên tắc chung, bạn không nên sử dụng trực tiếp core. Tất cả các công cụ ổn định từ nó có sẵn trong std được bao gồm tự động.

0

Nó chỉ ra rằng tôi phải sử dụng use std::ops::Mul;.

+0

Sử dụng' libcore' là có thể, và là cho tình huống khi bạn đang xây dựng mà không có 'libstd' ở tất cả. 'libstd', đó là những gì kênh ổn định của Rust phơi bày vào lúc này. – bluss

Các vấn đề liên quan