Почему в этой структуре rppal I2c нет методов? - PullRequest
0 голосов
/ 29 июня 2019

Я играл с Rust на Raspberry Pi, пытаясь построить контроллер кофемашины.Я столкнулся с этой проблемой очень рано.Я использую библиотеку rppal с надеждой на создание драйвера 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);
  |         ^^^^^^^^^^^

error[E0599]: no method named `set_slave_address` found for type `std::result::Result<rppal::i2c::I2c, rppal::i2c::Error>` in the current scope
 --> src/main.rs:9:6
  |
9 |     foo.set_slave_address(ADDR);
  |         ^^^^^^

В основном я следую примерам, но кажется, что я не могу создать стойку с необходимыми методами!, чувствую, что я упускаю что-то простое!

Вот код, не так уж много.

use rppal::i2c::I2c;

const ADDR: u16 = 0x27;

fn main() {
    println!("hello world");
    let mut foo = I2c::new();
    foo.set_timeout(1000);
    foo.set_slave_address(ADDR);
}

это библиотека -> https://github.com/golemparts/rppal ипример, который я пытался скопировать -> https://github.com/golemparts/rppal/blob/master/examples/i2c_ds3231.rs

Большое спасибо !!

1 Ответ

0 голосов
/ 29 июня 2019

В приведенном вами примере есть строка:

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>>

...