В приведенном вами примере есть строка:
let mut i2c = I2c::new()?;
Знак вопроса не является случайностью. Обратите внимание, что в ошибке вы получаете тип i2c в вашем коде:
error[E0599]: no method named `set_timeout` found for type `std::result::Result<rppal::i2c::I2c, rppal::i2c::Error>` in the current scope
--> src/main.rs:8:6
|
8 | foo.set_timeout(1000);
|
Это не i2c
, а Result<i2c, Error>
. Знак вопроса в этом случае распаковывает Result
, и, если это ошибка, выводит ее из текущей функции.
Обратите внимание, что для того, чтобы это работало, ваша текущая функция также должна возвращать тип Result, поэтому вы должны сопоставить сигнатуру функции main()
, приведенную в примере, с fn main() -> Result<(), Box<dyn Error>>