2015-09-25 118 views
-1

我有一個函數返回主機名的函數sys_info::hostname。唯一的問題是,hostname returnsResult<String, Error>,但我需要另一個函數,必須有返回類型Result<(), String>。我怎樣才能撥打sys_info::hostname並在不返回相同類型的函數中返回主機名?在提出問題之前,由於格式問題,第二個函數的返回類型無法更改。更改返回結果的函數的返回類型

+1

你的問題並沒有真正提供足夠的信息來回答它的有效途徑。你預期會發生什麼?Ok(String)'或'Err(Error)'?你如何在兩種表示之間進行轉換? – Shepmaster

+0

對不起,[這裏[[http://pastebin.com/H2ngtRJF]是我正在使用的代碼,希望能清除我的問題是什麼? –

+1

您應該[編輯]您的問題以包含問題的[MCVE](/ help/mcve)。 – Shepmaster

回答

0

而不是使用try!宏,如果結果類型不兼容,則不能使用宏,請使用match語句拆分返回值sys_info::hostname,並根據其部分執行所需操作。 Example

struct Error; 

fn thing_returning_result(succeed: bool) -> Result<String, Error> { 
    if succeed { 
     Ok("Hello".into()) 
    } else { 
     Err(Error) 
    } 
} 

fn thing_returning_other_result(succeed: bool) -> Result<(), String> { 
    match thing_returning_result(succeed) { 
     Ok(s) => Err(s), 
     Err(_) => Err("whoopsies".into()) 
    } 
} 

fn main() { 
    println!("{:?}", thing_returning_other_result(false)); 
} 
+0

我對這個問題表示歉意;但我該如何使用http://docs.fillzpp.org/sys-info-rs/sys_info/fn.hostname.html? –

+1

你能更具體地說明你嘗試過的方法嗎?我現在想不出比「你稱之爲功能」更有用的答案。 –

+0

[here](http://pastebin.com/H2ngtRJF)是我到目前爲止的代碼@Will Fischer –

0

我會使用mapmap_err

struct Error; 

fn inner() -> Result<String, Error> { 
    Err(Error) 
} 

fn outer() -> Result<(), String> { 
    inner() 
     .map(|ok_val|()) 
     .map_err(|err_val| "Something".to_string()) 
} 

fn main() { 
    outer(); 
}