Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 递归探索多维向量_Rust - Fatal编程技术网

Rust 递归探索多维向量

Rust 递归探索多维向量,rust,Rust,我现在正在学习生锈。我正在尝试转换一个小项目写在一个动态的语言,因为我学习。我遇到了一个问题,我正在努力寻找解决办法 我希望递归地访问n维向量的每个元素 以下是问题的一般代码: explore(collection) { for item in collection { if item is Collection { explore(item) } else { operate(item)

我现在正在学习生锈。我正在尝试转换一个小项目写在一个动态的语言,因为我学习。我遇到了一个问题,我正在努力寻找解决办法

我希望递归地访问n维向量的每个元素

以下是问题的一般代码:

explore(collection) {
    for item in collection {
        if item is Collection {
            explore(item)
        }
        else {
            operate(item)
        }
    }
}
我使用的是
rustc 1.0.0(a59de37e9 2015-05-13)(2015-05-14版)

感觉如果不使用不安全的代码(我还没有学会),这是不可能的

我的问题如下:

  • 目前在锈菌中是否可能出现这种情况
  • 如果是这样的话,那么最像生锈的方法是什么

  • 对。有几种方法可以做到这一点,但没有更多细节,我只建议以下相对简单的方法:

    //在Rust中,更喜欢使用枚举而不是动态分派。
    枚举项{
    收集(Vec),
    值(T),
    }
    //该explore函数在所存储的类型(T)和,
    //以及对值执行的操作。
    fn探索(集合:&[项目],操作:&多功能)
    其中F:FnMut(&T){
    对于集合中的项目{
    比赛项目{
    &项目::收集(参考项目)=>探索(项目,操作),
    &项目::值(参考值)=>操作(值)
    }
    }
    }
    fn操作\u i32(值:&i32){
    println!(“操作({})”,值;
    }
    fn main(){
    使用项目::*;
    让root=vec[
    值(1),
    收藏(vec[
    值(2),
    值(3),
    ]),
    值(4),
    ];
    探索(&root,&mut操作\u i32)
    }
    

    在铁锈书中关于和的章节中可以找到进一步的相关阅读。

    与简单的朴素的
    &F
    /
    FnMut
    相比,使用
    &F
    /
    Fn
    有什么好处?
    F:FnMut
    更广泛地有用。这样看:没有特别的理由不允许改变其环境的闭包,所以我们最好允许它们
    F:Fn
    也不是很简单,只是不同而已。一个不同的特性,它只需要一个不可变的指针,而不是一个可变的指针。
    explore
    函数的语义非常简单,指针是可变的,甚至不会带来不便
    /耸耸肩
    我们可以调用几次
    &mut operation\u i32
    ?这不应该为其他调用锁定函数吗?但我明白你的意思。如果我知道向量是齐次的,唯一未知的是维数,那么有可能避免枚举包装吗?例如
    Vec
    Vec
    @tafia:在这种情况下,没有。除了调用
    explore
    之外,没有任何东西可以保存借阅。我们借了一本书,把它传给《探索》,然后它就走了。