gpt4 book ai didi

rust - 预期枚举 `std::result::Result` ,使用 for 循环时发现 `()`

转载 作者:行者123 更新时间:2023-12-03 11:33:04 26 4
gpt4 key购买 nike

我正在修改 the texture synth 中的示例之一项目:

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(())
}

关于rust - 预期枚举 `std::result::Result` ,使用 for 循环时发现 `()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65017684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com