【问题标题】:How to include and use Rust libraries如何包含和使用 Rust 库
【发布时间】:2014-06-18 12:44:38
【问题描述】:

这是我的文件

main.rs

mod sort;

fn main() {
    let v = ~[0,1,3,7,5,7,9,4,2,6,9,5,3,5,0,7,6,9,0,2,3,4,2,4,7,9,7];
    sort::mergeSort(v);
    sort::print(v);
}

排序.rs

use std::vec;
pub fn mergeSort<T: Clone+Ord>(a: &mut[T]){
    let mid = a.len()/2 as uint;
    let mut aux = vec::with_capacity(mid+1);
    __mergesort(a, 0, a.len(), aux);

    fn __mergesort<T: Clone+Ord>(a: &mut[T], lo: uint, hi: uint, aux: &mut[T]){
        let mid = a.len()/2 as uint;
        if mid > 0 {
            __mergesort(a, lo, mid, aux);
            __mergesort(a, mid+1, hi, aux);
            __merge(a, mid, aux);
    }

        fn __merge<T: Clone+Ord>(a: &mut[T], lo: uint, mid: uint, hi: uint, aux: &mut[T]) {
            __clone_array(a, 0, mid+1, aux, 0);
            let mut i = 0;
            let mut j = 0;
            let mut k = 0;
            while k < a.len() {
                if j >= a.len()-mid {
                    __clone_array(a, k, a.len(), aux, 0);
                    break;
                } else if i >= mid {
                    break;
                }
                if aux[i] <= a[mid+j] {
                    a[k] = aux[i];
                    i += 1;
                } else {
                    a[k] = a[mid+j];
                    j += 1;
                }
                k += 1;
            }
        }

        fn __clone_array<T: Clone>(a: &[T], af: uint, al: uint, b: &mut[T], bf: uint){
            for i in range(bf, bf+al-af) {
                b[i] = a[af+i].clone();
            }
        }
    }
}

pub fn print<T: ToStr>(v: &[T]) {
    print!("[ ");
    for i in range(0, v.len()) {
        print!("{} ", v[i].to_str());
    }
    println!("]");
}

这是我得到的错误

sort.rs:44:23: 44:41 错误:未解析名称vec::with_capacity

sort.rs:44 让 mut aux = vec::with_capacity(mid+1); ^~~~~~~~~~~~~~~~~~

错误:由于先前的错误而中止

我做错了什么?

【问题讨论】:

  • 我认为你粘贴的内容上面的错误消息中还有几行,你能也粘贴一下吗?
  • @dbaupp 我编辑了帖子。
  • 谢谢!你有什么版本的 Rust? (rustc -v 的输出。)
  • rustc 0.10 主机:x86_64-unknown-linux-gnu
  • 为什么是领先的__?这完全是多余的。

标签: rust


【解决方案1】:

with_capacity 不是std::vec 中的函数,它是a static method on the Vec type。在vec::with_capacity 中将v 大写(Vec 自动在范围内,是前奏的一部分)。

【讨论】:

  • 哇,我不敢相信就是这样。也感谢您的文档。
【解决方案2】:

在不久的将来,您将使用 Cargo 来管理包括外部依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 2023-03-31
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2016-09-04
    • 2018-02-17
    相关资源
    最近更新 更多