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”,当值确实未使用时,问题在于输入代码中,并且编译器的警告是正确的、清晰的和有用的。