本教程展示了一些非常基本的模式匹配示例,例如匹配整数以模拟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
Run Code Online (Sandbox Code Playgroud)
所以,看一个粗略的翻译,能够这样做会很高兴:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我知道你可以在这里使用if语句,我只是将它作为矢量模式匹配的一个例子.
目前返回:
patterns.rs:10:4: 10:5 …Run Code Online (Sandbox Code Playgroud)