预期枚举`std::result::Result`,在使用for循环时找到`()`
我正在修改纹理合成项目中的一个示例:
use texture_synthesis as ts;
fn main() -> Result<(), ts::Error> {
//create a new session
let texsynth = ts::Session::builder()
//load a single example image
.add_example(&"imgs/1.jpg")
.build()?;
//generate an image
let generated = texsynth.run(None);
//save the image to the disk
generated.save("out/01.jpg")
}
我想用for循环重复这三遍。这就是我认为我可能会这样做的方式:
use texture_synthesis as ts;
fn main() -> Result<(), ts::Error> {
for i in 0..3 {
let texsynth = ts::Session::builder()
//load a single example image
.add_example(&"imgs/1.jpg")
.build()?;
//generate an image
let generated = texsynth.run(None);
//save the image to the disk
let index: String = i.to_string();
let outputPath = ["out/", &index, ".jpg"].concat();
generated.save(outputPath );
};
}
但是,这给了我错误:
fn main() -> Result<(), ts::Error> {
| ---- ^^^^^^^^^^^^^^^^^^^^^ expected enum `std::result::Result`, found `()`
| |
| implicitly returns `()` as its body has no tail or `return` expression
这听起来像是 main 函数抛出了一个错误,因为它没有得到它想要的类型的结果?我怎么能解决这个问题?
回答
该main函数定义为fn main() -> Result<(), ts::Error>,这意味着它必须返回一个类型为 的值Result<(), ts::Error>。在原始代码中,这是由最后一行完成的:
generated.save("out/01.jpg") // Note the absence of semicolon here
因为generated.save返回一个正确类型的值(该return关键字对于 Rust 中函数的最后一个表达式是可选的,前提是表达式后没有分号)。
为了解决您的问题,您需要确保main返回正确类型的值。这需要两个改变:
- 如果调用
generated.save返回错误,那么您应该传播错误。这是由?后缀运算符完成的。 - 如果循环成功完成,那么您应该返回一个表示一切正常的值。这个值是
Ok(())。
完整代码:
use texture_synthesis as ts;
fn main() -> Result<(), ts::Error> {
//create a new session
for i in 1..3{
let texsynth = ts::Session::builder()
//load a single example image
.add_example(&"imgs/1.jpg")
.build()?;
//generate an image
let generated = texsynth.run(None);
//save the image to the disk
let index: String = i.to_string();
let outputPath = ["out/", &index, ".jpg"].concat();
generated.save(outputPath)?;
};
Ok(())
}
THE END
二维码