2015-04-02 185 views
6

我是Rust新手。我認爲use用於將標識符導入當前範圍,extern用於聲明外部模塊。但這種理解(也許是錯誤的)對我來說沒有任何意義。有人能解釋爲什麼Rust有這兩個概念,有什麼合適的案例可以使用它們?使用和extern有什麼區別?

+3

你指的是'extern crate foo'這個語句嗎?箱子和模塊在Rust中是不同的概念,你可能想看看[「基本術語:箱子和模塊」](http://doc.rust-lang.org/1.0.0-alpha.2/book/ crates-and-modules.html),它解釋了兩者之間的區別(我個人發現下面的例子過於詳細)。 – 2015-04-02 02:34:02

回答

6

extern crate foo表示您要鏈接到外部庫並將頂級箱子名稱帶入作用域(use foo)。 use bar本質上是引用完全限定符號的簡寫。

從理論上講,語言不需要需要use - 您始終可以完全限定名稱。但打字std::str::String.new(...)會變得非常乏味!相反,您只需輸入use std::str::String一次,然後String即可參考。 (該use語句String是前奏的一部分,所以你通常不會看到)

語言確實需要extern - 這就是你如何通知你要針對ISN一箱鏈接編譯器你自己的。

+1

如果沒有'use',我們甚至不能將'std'作爲它的外觀。要麼我們會有一個單一的標準庫文件夾,要麼每個人都會處理'String'實際上是'collections :: string :: String'的事實。 – delnan 2015-04-02 11:11:49