gpt4 book ai didi

vector - 向量上的 Rust 模式匹配

转载 作者:行者123 更新时间:2023-11-29 07:42:50 25 4
gpt4 key购买 nike

tutorial显示了一些非常基本的模式匹配示例,例如匹配整数以模拟 C 风格的 switch 语句。本教程还展示了如何对元组类型和结构进行基本解构。

似乎应该可以对向量进行模式匹配,但我无法找出正确的语法,也没有找到任何示例。

例如,在 Haskell 中,您可以轻松地解构列表:

foldr :: (a -> b -> b) -> b -> [a] -> b
foldr func initValue [] = initValue
foldr func initValue (x:xs) = func initValue $ foldr initValue func xs

所以,看一个粗略的翻译,如果能够做到这一点就好了:

fn foldr<A, B>(func: fn(A, B) -> B,
initValue: B,
vals: [A]) -> B {
alt vals {
[] { ret initValue; }
_ {
let h = vec::head(vals),
t = vec::tail(vals);
ret foldr(func, func(initValue, h), t);
}
}
}

注意:我知道您可以在此处使用 if 语句,我只是将其用作向量模式匹配的示例。

当前返回:

patterns.rs:10:4: 10:5 error: constant contains unimplemented expression type
patterns.rs:10 [] { ret initValue; }
^
error: aborting due to previous errors

教程中有一个解构结构(用 { .. } 定义)和元组(用 ( .. ) 定义)的例子,所以它看起来像考虑到向量还包含特殊语法(用 [ .. ] 定义),应该有对向量的内置支持。

如果我也以错误的方式使用矢量,请随时纠正我。

最佳答案

你需要slice patterns :

fn vec_alt<T>(vals: Vec<T>) -> &'static str {
match vals[..] {
[a, b] => "two elements",
[a, b, c] => "three elements",
_ => "otherwise",
}
}

关于vector - 向量上的 Rust 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9282805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com