我有一個傳感器規格列表。每種傳感器類型都有一個伴隨結構。傳感器規格有一個傳感器類型和一個鍵,數據可以作爲字符串從數據庫中獲取。解析不同類型的字符串
根據傳感器類型的不同,數據應該轉換爲數值,可以是u8或f64。
下面是一個例子:
use std::collections::HashMap;
struct SensorSpec {
sensor_type: SensorType,
data_key: String,
}
enum SensorType {
A,
B,
}
#[derive(Debug)]
struct SensorA {
value: u8,
}
#[derive(Debug)]
struct SensorB {
value: f64,
}
fn main() {
// This simulates the database
let mut db: HashMap<String, String> = HashMap::new();
db.insert("a".to_string(), "42".to_string());
db.insert("b".to_string(), "13.37".to_string());
// List of sensors
let mut sensor_specs: Vec<SensorSpec> = vec![
SensorSpec { sensor_type: SensorType::A, data_key: "a".to_string() },
SensorSpec { sensor_type: SensorType::B, data_key: "b".to_string() },
];
for sensor in sensor_specs {
// 1. Fetch data as string from db
// 2. Convert it according to the sensor type
// 3. Print sensor object to terminal
let val = db.get(&sensor.data_key);
let s = match sensor.sensor_type {
SensorType::A => {
SensorA { value: val }
},
SensorType::B => {
SensorB { value: val }
},
};
println!("{:?}", s);
}
}
有兩個問題:
- 我需要將字符串轉換爲根據傳感器類型數字類型。我怎麼做?
- 匹配手臂具有不兼容的類型。
以下是編譯消息#2:
example.rs:43:17: 50:10 error: match arms have incompatible types:
expected `SensorA`,
found `SensorB`
我怎樣才能解決這個問題呢?
請詢問[每個問題只有一個問題](http://meta.stackexchange.com/q/39223/281829)。 – Shepmaster
@Shepmaster這兩個問題是直接相關的。我知道如何轉換類型,但在兩個比賽武器的情況下,它不起作用。所以沒有理由爲downvote。 –