我在Rust编程只有几个月.话虽如此,我还是收到了这样的警告:
warning: value assigned to `amount` is never read
--> src\execute_action_functions.rs:428:21
|
428 | let mut amount: Option<f64> = None;
| ^^^^^^
|
= help: maybe it is overwritten before being read?
为清楚起见,为避免意外遗漏关键细节,整个函数如下:
pub async fn handle_all_gemini(prefix: &str, message: &str, shared_neural_network: Arc<Mutex<NeuralNetwork>>, divisor: &f64) {
if prefix.contains("Gemini received") {
if message.contains("heartbeat") {
return;
}
else {
let data: Result<Value, serde_json::Error> = serde_json::from_str(message);
let mut amount: Option<f64> = None;
let mut price: Option<f64> = None;
match data {
Ok(value) => {
if value.get("socket_sequence")
.and_then(Value::as_i64) == Some(0) {
println!("Gemini: socket sequence is 0, ignoring...");
return;
}
if let Value::Object(map) = &value {
if let Some(Value::Array(events)) = map
.get("events") {
if let Some(Value::Object(event)) =
events.get(0) {
amount = event.get("amount")
.and_then(|v| v.as_str())
.and_then(|s| s.parse::<f64>().ok());
price = event.get("price")
.and_then(|v| v.as_str())
.and_then(|s| s.parse::<f64>().ok());
}
else {
panic!("Gemini: event is not an object.
message: {}", message);
}
}
else {
panic!("Gemini: events is not an array.
message: {}", message);
}
}
else {
panic!("Gemini: Value is not an object.
message: {}", message);
}
},
Err(e) => {
panic!("Failed to parse JSON Gemini message\nError: {}
Message: {}", e, message);
},
}
let new_values = [amount, price];
let mut scaled_values: Vec<f64> = Vec::new();
for value in &new_values {
if let Some(val) = value {
scaled_values.push(val / divisor);
}
else {
println!("One of the values was None");
panic!("amount: {:?}, price: {:?}", &amount, &price);
}
}
if prefix.contains("sol") {
let indices = [58, 59];
let mut neural_network =
shared_neural_network.lock().await;
neural_network.update_input(&indices, &scaled_values)
.await;
}
else if prefix.contains("xrp") {
let indices = [92, 93];
let mut neural_network =
shared_neural_network.lock().await;
neural_network.update_input(&indices, &scaled_values)
.await;
}
else {
panic!("This shouid never occur. Somehow prefix cointained phrase
Gemini received but didn't contain the phrases XLM or XRP.
prefix is: {}\nmessage: {}", prefix, message);
}
}
}
else {
println!("Gemini: got a weird message: {}\nprefix:{}", message, prefix);
}
}
正如您所看到的,至少在初始化new_values
时,它肯定正在被读取,如果我没有弄错的话,在for循环中也是如此.
我试着将其更改为amount: Option<f64>;
,但收到了一个非常奇怪的警告:
warning: variable does not need to be mutable
--> src\execute_action_functions.rs:429:17
|
429 | let mut price: Option<f64>;
| ----^^^^^
| |
| help: remove this `mut`
这没有任何意义,因为我要将值更改为if let Value::Object(map) = &value {
因此,这让它变得更加令人困惑.我不确定我做错了什么,因为我没有给它一个真正的价值,所以没有"在读之前被覆盖"的问题,对吗?这跟if let
号公路有关系吗?
任何帮助都将不胜感激.