fn buffer_f<const C: usize>(p: &str) -> Result<[u8; C], Box<dyn std::error::Error>>
//<const C: usize, S: AsRef<str>>
//where
// S: AsRef<str>,
{
let mut f = File::open(p)?;
let mut buffer = [0; C];
let number = f.read(&mut buffer[..])?;
Ok(buffer)
}
fn main(){
let p = "./Cargo.toml";
buffer_f::<20>(p);
}
上面函数buffer_f的第二个参数想加上 S: AsRef 使得&str或者String都可以。
不知道怎么写
如果 fn buffer_f<const C: usize,S: AsRef<str>,>(p: S)-> ...
这样 好像S也被设置成const了
1
共 5 条评论, 1 页
评论区
写评论Please read the documentation.
Rust reference: https://doc.rust-lang.org/reference/items/generics.html
--
👇
rdigua
传 一个const 可以按照上面来
常规的可以这样来
不清楚的是 以上两种都有的 放一起怎么写呢
哦大概看明白了你的问题。
首先,这个不叫函数参数,这个写在尖括号<>里面叫泛型参数。写在小括号()里面的才叫函数参数。
然后,在泛型参数中,形如
const VALUE: Type
的语法是常量泛型,这里const
仅修饰Value
,表示它是个编译期确定的值。const
不会修饰逗号后面的泛型参数。建议好好看看the book和reference,把rust的语法搞清楚再下手写。
let mut f = File::open(p)?;
替换成
let mut f = File::open(p.as_ref())?;
就能编译通过,buffer_f也就能接受&str、String以及&String类输入,不知道这是不是你想要的效果。
不能理解你的问题描述。什么叫“S也被设置成const了”?
另外我建议直接照抄
File::open
的类型约束。