我一直在树莓派上玩Rust,希望构建一个咖啡机控制器。我很早就遇到了这个问题。 我正在使用rppal库,希望为LCD屏幕创建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);
| ^^^^^^
我基本上是在跟踪示例,但是似乎无法用所需的方法创建strut!感觉好像我缺少一些简单的东西!
这里是代码,不多。
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
非常感谢!
答案 0 :(得分:0)
在您发布的示例中,有以下行:
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>>