我想使用 [u8]
条板箱,使用以下代码调用二进制值redis-rs
的Redis函数:
let _ : () = redis::cmd("...").arg("...").arg(data).query(&mut con)?;
但是,当data
是Vec<u8>
时,会导致此错误:the trait `redis::ToRedisArgs` is not implemented for `&std::vec::Vec<u8>`
当data
是[u8]
时出现此错误:the trait `redis::ToRedisArgs` is not implemented for `[u8]`
当查看ToRedisArgs
的文档时,Vec<T>
应该有一个实现。
最佳答案
这是您的问题的可复制示例:
fn main() {
let data: &std::vec::Vec<u8> = &Vec::new();
let _ = redis::cmd("...").arg(data);
}
编译会导致此错误:error[E0277]: the trait bound `&std::vec::Vec<u8>: redis::ToRedisArgs` is not satisfied
--> src/main.rs:3:33
|
3 | let _ = redis::cmd("...").arg(data);
| ^^^^ the trait `redis::ToRedisArgs` is not implemented for `&std::vec::Vec<u8>`
|
= help: the following implementations were found:
<std::vec::Vec<T> as redis::ToRedisArgs>
如错误消息所述,ToRedisArgs
是针对Vec<T>
实现的,而不是&Vec<T>
实现的。为了解决这个问题,您可以克隆data
以获得Vec<u8>
:fn main() {
let data: &std::vec::Vec<u8> = &Vec::new();
let _ = redis::cmd("...").arg(data.clone());
}
或者,您可以从向量中提取一个切片,因为ToRedisArgs
是为切片实现的:fn main() {
let data: &std::vec::Vec<u8> = &Vec::new();
let _ = redis::cmd("...").arg(data.as_slice());
}
关于redis - 如何将二进制值转换为Redis命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351736/