我正在用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
函数中,这将简化事情,但我想我会征求人们的意见/建议,以防我走错了路。
任何帮助感激不尽。
1条答案
按热度按时间ldioqlga1#
请记住,您可以从匹配表达式返回值。