Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
Arrays 如何使Rust函数在数组大小上通用?_Arrays_Rust - Fatal编程技术网

Arrays 如何使Rust函数在数组大小上通用?

Arrays 如何使Rust函数在数组大小上通用?,arrays,rust,Arrays,Rust,我的代码通常使用长度为303的数组,我很乐意将这个数字硬编码到我的代码中。但出于测试目的,我想展示一些函数在较小阵列上的行为。如何实现以下逐点函数的等价项?或者这是不可能的,我将在运行时使用切片并显式地检查每个切片的大小,而不是依赖编译器不让任何东西通过 pub fn recover<N>( mut patch_resources: &[KCal; N], patch_max_resources: &[KCal; N],

我的代码通常使用长度为303的数组,我很乐意将这个数字硬编码到我的代码中。但出于测试目的,我想展示一些函数在较小阵列上的行为。如何实现以下逐点函数的等价项?或者这是不可能的,我将在运行时使用切片并显式地检查每个切片的大小,而不是依赖编译器不让任何东西通过

    pub fn recover<N>(
        mut patch_resources: &[KCal; N],
        patch_max_resources: &[KCal; N],
        resource_recovery: f32,
        accessible_resources: f32)
    where
        N: usize
    {
        for i in N {
            if patch_resources[i] < patch_max_resources[i] {
                let inaccessible = patch_max_resources[i] * (1. - accessible_resources) / accessible_resources;
                let underlying_resources = patch_resources[i] + inaccessible;
                patch_resources[i] += underlying_resources
                    * resource_recovery
                    * (1. - underlying_resources * accessible_resources/ patch_max_resources[i]);
            }
            assert!(patch_resources[i].is_normal());
        }
    }
pub-fn-recover(
mut patch_资源:&[KCal;N],
补丁最大资源:&[KCal;N],
资源回收:f32,
可访问资源:f32)
哪里
N:使用
{
因为我在N{
如果补丁资源[i]<补丁最大资源[i]{
让不可访问=补丁最大资源[i]*(1.-可访问资源)/可访问资源;
让底层资源=补丁资源[i]+不可访问;
补丁_资源[i]+=基础_资源
*资源回收
*(1.-基础资源*可访问资源/补丁最大资源[i];
}
断言!(补丁资源[i]。是正常的();
}
}
我想你需要一个板条箱

我想你的代码应该是这样的

pub-fn-recover(
mut修补程序资源:&常规阵列,
修补程序\u最大\u资源:&常规阵列,
资源回收:f32,
可访问资源:f32)
哪里
N:排列长度
{
因为我在N{
如果补丁资源[i]<补丁最大资源[i]{
让不可访问=补丁最大资源[i]*(1.-可访问资源)/可访问资源;
让底层资源=补丁资源[i]+不可访问;
补丁_资源[i]+=基础_资源
*资源回收
*(1.-基础资源*可访问资源/补丁最大资源[i];
}
断言!(补丁资源[i]。是正常的();
}
}

回答了您的问题吗?既然您已经获取了引用,那么切片(
&[KCal]
)会起作用吗?正如问题中提到的,我看到切片的缺点是,检查N==N将成为运行时的任务,而不是编译器的任务。@MarkusKlein如果“使用宏执行”比“使用切片执行”更好,那么是的。我想这取决于我的用例,它很乐意去掉运行时不需要的东西,只需要两个左右的实现,所以宏(编译时)比切片(运行时)好,是吗?