enum`std :: result :: Result`가 필요합니다. for 루프를 사용할 때`()`를 찾았습니다.
Nov 26 2020
텍스처 합성 프로젝트 의 예제 중 하나를 수정하고 있습니다 .
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
이것은 원하는 유형의 결과를 얻지 못하기 때문에 주 함수가 오류를 던지는 것처럼 들립니다. 이 문제를 어떻게 해결할 수 있습니까?
답변
4 Jmb Nov 26 2020 at 14:42
이 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(())
}