2017-12-28 2 views
0

을 감안할 때이 예제 결과 반환 기능 : 나는 오류가는 '사용할 수 없음'연산자를 <(), error>

fn function() -> Result<(), &'static str> { 
    Ok(()) 
} 

fn main() { 
    function()?; // Compile error 
} 

: cannot use the ? operator in a function that returns()합니다.

왜 이러한 기능에는 ? 연산자를 사용할 수 없습니까? match 문을 사용하지 않도록 구문 설탕이 있습니까?

답변

2

function()Err 결과를 반환하면 어떻게 될까요? try!/?은 포함 함수가 동일한 Err을 반환하지만 (Result<…>이 아닌 ()을 반환 할 수 없음)을 반환 할 수 없으므로 try!을 사용할 수 없습니다. 당신은 당황하고 싶은 경우에, 당신은 unwrap를 사용할 수 있습니다

function().unwrap(); 

당신이 오류를 무시하려면, 결과를 폐기 :

let _ = function(); 
+1

다른 말로하면, 위의 코드가 실패하는 유일한 이유는'?'연산자가'main'에 있고'main'이 값을 반환 할 수 없기 때문입니다.'?'는 그것을하려고 시도합니까? – BHustus

3

귀하의 mainResult를 반환하지 않습니다. 오류가있는 경우 무언가를해야합니다. 아마도 function().expect("oh no! function() failed!!");과 같은 것일지도 모릅니다. 예기치 않은 경우에 공황 및 오류가 발생할 수 있습니다. function(). expect()은 성공시 Result<A,B>A으로 바꾸고 오류 메시지와 B 오류가 발생하면 패닉이 표시됩니다.

또는 Result의 오류 값만 사용하여 자신의 오류 메시지를 추가하지 않고 비슷하게 작동하는 Result::unwrap()을 사용할 수 있습니다.

관련 문제