2016-04-07 5 views
8

Я пытаюсь прочитать один символ от stdin, но я не могу заставить его работать. В другой программе я использовал этот точно такой же метод, и он сработал.Почему модуль `std` не объявлен?

let mut buffer = [0]; 
let _ = std::io::stdin().read(&mut buffer); 
let a = buffer[0]; 

Компиляция это дает эту ошибку:

src/befunge.rs:220:17: 220:31 error: failed to resolve. Use of undeclared type or module `std::io` [E0433] 
src/befunge.rs:220  let _ = std::io::stdin().read(&mut buffer); 
+0

Если вы задаете вопросы по SO, пожалуйста, предоставьте [MCVE] (http://stackoverflow.com/help/mcve), если это возможно, чтобы можно было объективно проверить ответы для решения проблемы. Для вашего примера это может быть [эта простая программа] (https://play.rust-lang.org/?gist=43e3a4de6103ca986767bd304f54fe5e&version=stable&backtrace=0). –

ответ

17

Я предполагаю, что befunge.rs не корневой обрешетка, а подмодуль. Такие пути, как std::io::stdin(), которые используются за пределами объявления use ...;, относятся к текущему модулю, а не к абсолютному. Чтобы сделать путь абсолютным, префикс :: (как префикс / в unix-дорожках) ->::std::io::stdin(). В качестве альтернативы вы можете use некоторую часть пути, как:

use std; 
std::io::stdin(); 

или

use std::io; 
io::stdin(); 

Если вы используете подконтур, как std::io больше, чем когда-то в модуле, это обычно лучше use его на вершина.

Если вы находитесь в корневом ящике, нет никакой разницы между ::std и std, поскольку относительный путь поиска - это корень. Это имеет значение только в подмодулях. Также: пути в объявлениях use всегда абсолютны - сделать их относительно текущего префикса модуля self::.

+0

У меня возникла новая проблема с тем, что эти решения не устраняют. Я отредактировал главный пост. – Fluffy

+0

Задайте только один вопрос на SO-нить. Поэтому теоретически вы должны создать отдельный вопрос для своего редактирования. Но: на этот вопрос уже был дан ответ, так лучше искать. Спойлер: просто прочитайте все сообщение об ошибке компилятора (включая заметку). –

+1

Есть ли у нас обоснование в том, что мы делаем «использование» разных, что является абсолютным, а не относительно текущего модуля? – WiSaGaN

Смежные вопросы