教程 展示了一些非常基本的模式匹配示例,例如匹配整数以模拟 C 风格的 switch 语句。教程还展示了如何对元组类型进行基本解构和结构解构。
似乎应该可以对向量进行模式匹配,但我无法弄清楚它的正确语法,并且我没有找到任何示例。
例如,在 Haskell 中,您可以轻松地解构列表:
在解构使用
似乎应该可以对向量进行模式匹配,但我无法弄清楚它的正确语法,并且我没有找到任何示例。
例如,在 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
在解构使用
{ .. }
定义的结构体和( .. )
定义的元组的教程中有一个例子,因此似乎应该内置支持向量,因为它们也包含特殊语法[ .. ]
。如果我使用向量的方式不正确,请随时纠正我。
be
作为一个关键字,但目前并没有任何参考。 - ash