Rust 错误警告“从未读取分配的值”
我收到这样的警告:Rust 错误警告“从未读取分配的值”,rust,Rust,我收到这样的警告: Compiling substrate-transaction-graph v2.0.0 (/home/niko/sub/substrate/core/transaction-pool/graph) warning: value assigned to `altered_priority` is never read --> core/transaction-pool/graph/src/pool.rs:137:15 | 137 |
Compiling substrate-transaction-graph v2.0.0 (/home/niko/sub/substrate/core/transaction-pool/graph)
warning: value assigned to `altered_priority` is never read
--> core/transaction-pool/graph/src/pool.rs:137:15
|
137 | let mut altered_priority=priority;
| ^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_assignments)] on by default
= help: maybe it is overwritten before being read?
在编写本守则时:
match self.api.validate_transaction(at, xt.clone())? {
TransactionValidity::Valid { priority, requires, provides, longevity } => {
info!(target: "txpool","priority before alteration: priority={:?}",priority);
let mut altered_priority=priority;
altered_priority=1;
Ok(base::Transaction {
data: xt,
bytes,
hash,
priority: altered_priority,
requires,
provides,
valid_till: block_number.as_().saturating_add(longevity),
})
},
TransactionValidity::Invalid(e) => {
bail!(error::Error::from(error::ErrorKind::InvalidTransaction(e)))
},
TransactionValidity::Unknown(e) => {
self.listener.write().invalid(&hash);
bail!(error::Error::from(error::ErrorKind::UnknownTransactionValidity(e)))
},
}
我添加了日志消息,在转储变量后,我可以确认它们具有代码执行后应具有的值,即事务结构中的优先级字段确实已更改:
2019-05-13 21:41:17 priority before alteration: priority=107
2019-05-13 21:41:17 Map TX begins
2019-05-13 21:41:17 TX IS OK: Transaction { hash: 0x79832c9790aee4b199a046cce27e46bb7e941f38e41d25629c922c318cf7c3a2, priority: 1, valid_till: 18446744073709551615, bytes: 107, requires: [], provides: [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0200000000000000], data: 81ffd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27df063b12602c33fa92df4895ab3ecd9f2ad72544bd4b55f1c6c91c8c107dba3654fd13ca5e81612a7fe011414ca604e8f99feb1ed35ce471361ee2c14defdc503080003000ca10f}
2019-05-13 21:41:17 TX priority: 1
2019-05-13 21:41:17 Ok(Transaction { hash: 0x79832c9790aee4b199a046cce27e46bb7e941f38e41d25629c922c318cf7c3a2, priority: 1, valid_till: 18446744073709551615, bytes: 107, requires: [], provides: [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0200000000000000], data: 81ffd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27df063b12602c33fa92df4895ab3ecd9f2ad72544bd4b55f1c6c91c8c107dba3654fd13ca5e81612a7fe011414ca604e8f99feb1ed35ce471361ee2c14defdc503080003000ca10f})
2019-05-13 21:41:17 Map TX ends
实际上,即使没有转储值,从代码本身可以明显看出,在创建struct事务时使用了该值。
那么,这是Rust中的一个bug吗?您编写的let mut changed_priority=priority;紧接着是更改的_优先级=1;。编译器警告您,在这两条语句中的第一条语句中,您为更改的_priority指定的初始值priority永远不会被读取。这是正确的:从更改的_priority变量读取的唯一值是1,而不是priority
没有理由写入一个值,然后立即无条件地用另一个值替换它。您可以将这两条语句替换为simply let_priority=1;。或者您可以去掉变量,将优先级:1改为下面的priority:alterned\u priority。不,让mut alterned\u priority=priority是有原因的,我正在从priority复制类型,因为我不知道它是什么类型,所以为了避免深入研究代码,我只是把值和类型一起复制了一遍:为什么不用1来代替改变的优先级?它会被转换成所需的类型,就像变量一样。@ArekBulski我没有否决,但我推测否决者不喜欢提问者立即跳到“错误警告”的地步以及“bug in Rust”,当值确实未使用时,问题在于输入代码中,并且编译器的警告是正确的、清晰的和有用的。