rust 基于输入条件分配变量

wj8zmpe1  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(118)

我正在用rust写一个函数,它接受对一维ndarray的引用。作为函数的一部分,我需要检查输入数组引用的长度是否是2的幂。如果不是这种情况,则必须使用输入数组的相同元素创建一个新数组,填充零直到长度为2的幂。我有一个函数zero_pad,它接受数组引用,并在需要时进行检查和填充。
我遇到的问题是如何分配正确的数组。例如,假设我有一些未初始化的变量_x,它将被分配给要使用的任何数组(原始数组或填充数组)。我基本上破解了这个函数的代码是非常混乱和非rustacean,因为我希望它是干净的,理想的效率。

pub fn func<T>(x: &Array1<T>) -> Array1<Complex<T>> 
{
    let N = x.len();
    let zero = T::from_f64(0.0).unwrap();
    let opt = zero_pad(x); // zero_pad does the check and returns an option with None if no padding and Some(x) with new padded array if required

    let tmp: Array1<T>;
    let _x: &Array1<T>;
    let mut padded: bool = false;
    match opt{
        None => {
            padded = false;
            tmp = array![zero]; // Initialise just to satisfy compiler 
        },
        Some(arr) => {
            tmp = arr;
            padded = true;
        }
    }
    if padded {
        _x = &tmp;
    }
    else {
        _x = x;
    }

只能帮助我获得这个所需的功能。我觉得我最好的办法是写一个宏,它调用一个函数来为我做这个检查,并基本上将正确的数组传递到func函数中,这将简化事情,但我想我会征求人们的意见/建议,以防我走错了路。
任何帮助感激不尽。

ldioqlga

ldioqlga1#

请记住,您可以从匹配表达式返回值。

let tmp: Array1<T>;
let _x = match zero_pad(x) {
    Some(new) => {
        tmp = new;
        &tmp
    }
    None => &x,
};

相关问题