在Rust中,如何在BigInt上使用已实现的特征FromStr?

时间:2014-04-30 14:54:31

标签: rust

我正在尝试编译这个程序:

extern crate num;
use num::bigint::BigInt;
use std::from_str::FromStr;

fn main () {
    println!("{}", BigInt::from_str("1"));
}

但是rustc的输出是

testing.rs:6:20: 6:36 error: unresolved name `BigInt::from_str`.
testing.rs:6     println!("{}", BigInt::from_str("1"));
                                ^~~~~~~~~~~~~~~~
note: in expansion of format_args!
<std macros>:2:23: 2:77 note: expansion site
<std macros>:1:1: 3:2 note: in expansion of println!
testing.rs:6:5: 6:43 note: expansion site
error: aborting due to previous error

我怀疑自己做了一些非常错误的事情,但我尝试过搜索示例并尝试了一系列不同的更改,而且我没有尝试过。

如何更改源代码以便编译?

4 个答案:

答案 0 :(得分:5)

在最新版本的Rust中删除了普通函数from_str。此功能现在仅作为FromStr特征的方法提供。

解析值的现代方法是str的{​​{3}}方法:

extern crate num;
use num::bigint::BigInt;

fn main() {
    match "1".parse::<BigInt>() {
        Ok(n)  => println!("{}", n),
        Err(_) => println!("Error")
    }
}

答案 1 :(得分:4)

extern crate num;
use num::bigint::BigInt;

fn main () {
    println!("{}", from_str::<BigInt>("1"));
}

在函数调用中,您需要将::放在尖括号之前。

答案 2 :(得分:1)

这适用于直接调用trait实现而不是通过实用程序函数。 这不是惯用的。

extern crate num;
use num::bigint::BigInt;
use std::from_str::FromStr;

fn main () {
    let x : Result<BigInt,_> = FromStr::from_str("1");
    println!("{}", x);
}

答案 3 :(得分:1)

您的原始代码几乎可以按原样工作:

import React from 'react';

const Item = ({ isHighlighted }) => {
    const style = {
        height: '50px',
        marginTop: '10px',
        border: isHighlighted ? '2px solid red' : '1px solid black'
    };

    return <div style={style} />
};

export default ( { } ) => {

    const items = [{
        id: '1',
        date: new Date("2019-01-01"),
        name: 'item1'
    }, {
        id: '2',
        date: new Date("2019-01-03"),
        name: 'item1'
    }, {
        id: '3',
        date: new Date("2019-01-02"),
        name: 'item1'
    }];

    const highlightedItem = items.reduce((acc, item) => {
        if (item.date > acc.closestDate) {
            return {
                id: item.id,
                closestDate: item.date
            }
        } else {
            return acc;
        }
    }, {
        id: '',
        closestDate: new Date(0)
    });

    return (
        <div>
           {
               items.map(item => <Item isHighlighted={item.id === highlightedItem.id} />)
           }
        </div>
    );
}

您需要切换到use num::bigint::BigInt; // 0.2.0 use std::str::FromStr; fn main() { println!("{:?}", BigInt::from_str("1")); } ,并且std::str::FromStr返回from_str,它需要Result{:?})格式化程序。