尝试执行以下操作时遇到类型错误:
use kuchiki::parse_html;
use kuchiki::traits::*;
fn main() {
let data = r#"<!DOCTYPE html>
<html>
<body>
test
</body>
</html>"#;
let dom = parse_html()
.from_utf8()
.from_iter(data.as_bytes());
}
错误是:
error[E0271]: type mismatch resolving `<tendril::fmt::Bytes as tendril::fmt::SliceFormat>::Slice == u8`
--> src/main.rs:13:10
|
13 | .from_iter(data.as_bytes());
| ^^^^^^^^^ expected slice, found u8
|
= note: expected type `[u8]`
found type `u8`
= note: required because of the requirements on the impl of `std::convert::Into<tendril::tendril::Tendril<tendril::fmt::Bytes>>` for `&u8`
data.as_bytes()
返回对字节切片(&[u8]
)的引用,所以我对found u8
的来源感到困惑。如何纠正该错误?
以下是该方法的文档:https://docs.rs/kuchiki/0.7.3/kuchiki/traits/trait.TendrilSink.html#method.from_iter
答案 0 :(得分:2)
使用read_from()
代替from_iter()
,如下所示:
use kuchiki::parse_html;
use kuchiki::traits::*;
fn main() {
let data = r#"<!DOCTYPE html>
<html>
<body>
test
</body>
</html>"#;
let dom = parse_html()
.from_utf8()
.read_from(&mut data.as_bytes());
}
您收到编译错误,因为from_iter()
需要项目类型为Tendril
的迭代器。 Tendril是一种字符串,因此data
的类型必须类似于Vec<&[u8]>
,但是您有&[u8]
。
您也可以使用from_iter()
使它工作,但是它的清晰度/效率要差一些:
use kuchiki::parse_html;
use kuchiki::traits::*;
fn main() {
let data = r#"<!DOCTYPE html>
<html>
<body>
test
</body>
</html>"#;
let dom = parse_html()
.from_utf8()
.from_iter(vec![data.as_bytes()]);
}