本教程展示了一些非常基本的模式匹配示例,例如匹配整数以模拟 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
本教程中有一个用于解构结构(用 定义{ .. }
)和元组(用 定义)的示例( .. )
,因此考虑到它们还包含特殊语法(用 定义),似乎也应该内置对向量的支持[ .. ]
。
如果我也以错误的方式使用向量,请随时纠正我。