我有一个函数,用来检查命令行参数,并根据输入的内容来改变图像,我知道如何改变for循环作用域之外的图像,但它不返回改变后的图像对象。
我在修改对象和返回它时遇到了麻烦,而且我太缺乏经验,不知道应该如何克服这个问题。
fn commands(args: Vec<String>, img1: &DynamicImage) -> DynamicImage {
let length = args.len();
let img2 = img1.clone();
for n in 2..length{
if &args[n] == "90"{
img2.rotate90();
return img2
}else if &args[n] == "180"{
img2.rotate180();
return img2
}else if &args[n] == "270"{
img2.rotate270();
return img2
}else{
eprintln!("Invalid input")
}
return img2
}
return img2
}
1条答案
按热度按时间wztqucjr1#
返回的是原始图像,而不是旋转后的图像。我一眼就能看出
img2
是不可变的,所以不太可能修改当前图像。检查文档后,它确实返回了一个新图像。下面是一种可以重写它的方法:
你可以考虑返回一个
Option<DynamicImage>
或Result<DynamicImage, InvalidDegreesError>
(其中InvalidDegreesError
是一些自定义的错误类型)来改进功能。另外,如果args
字段代表命令行参数,那么你可以考虑使用一个类似clap
的crate来处理输入验证。