簡體   English   中英

如何從Rust的BigInt中減去1?

[英]How does one subtract 1 from a BigInt in Rust?

我希望該程序在執行時編譯並打印314158

extern crate num;

use num::{BigInt, FromPrimitive, One};

fn main() {
    let p: BigInt = FromPrimitive::from_usize(314159).unwrap();
    let q: BigInt = p - One::one();
    println!("q = {}", q);
} // end main

編譯器錯誤是:

error[E0284]: type annotations required: cannot resolve `<num::BigInt as std::ops::Sub<_>>::Output == num::BigInt`
 --> src/main.rs:7:23
  |
7 |     let q: BigInt = p - One::one();
  |                       ^

關於特征,Rust遵循開放世界假設。 根據您的注釋,它知道pBigInt 它還知道One::one()具有實現One的類型。 因此,Rust正在BigInt上尋找一個減法運算符,該運算符將類似於One的東西作為參數。

num::BigInt as std::ops::Sub<Foo>>

Foo實現One 麻煩的是, BigInt 以幾種不同的方式實現Sub ,因此Rust不知道您是否要從p減去i32u64或另一個BigInt

一種答案是更明確地說明您的類型。

let p: BigInt = FromPrimitive::from_usize(314159).unwrap();
let one: BigInt = One::one();
let q: BigInt = p - one;

但是,更簡潔地說,您可以利用BigInt實現One的事實,並以這種方式幫助編譯器進行類型推斷。

let p: BigInt = FromPrimitive::from_usize(314159).unwrap();
let q: BigInt = p - BigInt::one();

(感謝@loganfsmyth,這是后一種解決方案!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM