0
文字列をパースして整数を取得し、match
を使用してエラーをチェックする次のコードを書きました。 Err(e)
が表示されたら、エラーe
を出力して、デフォルト値を返します。マッチの腕: "ミスマッチした型expected()、整数変数が見つかりました"
expected usize but got `()`
を取得し、既定値のリターンを削除した場合
error[E0308]: mismatched types
--> src/main.rs:37:32
|
37 | return 2;
| ^expected(), found integral variable
|
= note: expected type `()`
found type `{integer}
:それは()
を入力期待するが、整数を得たとして
return match t.parse::<usize>() {
Ok(n) => n,
Err(e) => {
println!("Couldn't parse the value for gateway_threads {}", e);
// Return two as a default value
return 2;
},
};
しかし、そのコードは、コンパイルに失敗します
error[E0308]: match arms have incompatible types
--> src/main.rs:33:24
|
33 | return match t.parse::<usize>() {
| ________________________^
34 | | Ok(n) => n,
35 | | Err(e) => {
36 | | println!("Couldn't parse the value for gateway_threads {}", e); //TODO: Log this
37 | | //return 2;
38 | | },
39 | | };
| |_________________^ expected usize, found()
|
= note: expected type `usize`
found type `()`
note: match arm with an incompatible type
--> src/main.rs:35:31
|
35 | Err(e) => {
| _______________________________^
36 | | println!("Couldn't parse the value for gateway_threads {}", e); //TODO: Log this
37 | | //return 2;
38 | | },
| |_____________________^
完全なコード(一部の値を取得するためにINI設定ファイルを解析しています):
extern crate threadpool;
extern crate ini;
use std::net::{TcpListener, TcpStream};
use std::io::Read;
use std::process;
use threadpool::ThreadPool;
use ini::Ini;
fn main() {
let mut amount_workers: usize;
let mut network_listen = String::with_capacity(21);
//Load INI
{
let conf: Ini = match Ini::load_from_file("/etc/iotcloud/conf.ini") {
Ok(t) => t,
Err(e) => {
println!("Error load ini file {}", e);
process::exit(0);
},
};
let section = match conf.section(Some("network".to_owned())) {
Some(t) => t,
None => {
println!("Couldn't find the network ");
process::exit(0);
},
};
//amount_workers = section.get("gateway_threads").unwrap().parse().unwrap();
amount_workers = match section.get("gateway_threads") {
Some(t) => {
return match t.parse::<usize>() {
Ok(n) => n,
Err(e) => {
println!("Couldn't parse the value for gateway_threads {}", e);
// Return two as a default value
return 2; //ERROR HERE;
},
};
},
None => 2, // Return two as a default value
};
let ip = section.get("bind_ip").unwrap();
let port = section.get("bind_port").unwrap();
network_listen.push_str(ip);
network_listen.push_str(":");
network_listen.push_str(port);
}
}
このエラーの原因を教えてください。 ;
で文を終わらない
amount_workers = match section.get("gateway_threads") {
Some(t) => {
match t.parse::<usize>() { // No return
Ok(n) => n,
Err(e) => {
println!("Couldn't parse the value for gateway_threads {}", e); //TODO: Log this
2 // No semicolon, no return
}
} // No semicolon
}
None => 2, //Default value is set to 2
};
へ
あなたは 'Err'ブランチで何をしたいですか? *何かを返すか、 'パニック!(...)'を呼ぶ必要があります。 –
@FlorianWeimer返り値2にデフォルト値を設定したい。私はエラー(expected)を得て、積分変数を見つけたので、コメントにあります。 – Olof
しかし、 'return 2'では、コンパイルは正しく行われますか?そうでない場合は、実際に興味のないコードバリエーションのエラーではなく、そのエラーを表示してください。 –