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
有教程的解構結構爲例(與{ .. }
定義)和元組(與(..)
定義),因此它似乎應該有內置的支持對於矢量也考慮到它們也包含一個特殊的語法(用[ .. ]
定義)。
如果我以錯誤的方式使用矢量,請隨時糾正我。
有點切線,但對於尾部呼叫,您應該使用「be」而不是「ret」。 – 2012-02-14 21:32:20
@ ian-b有趣的是,[教程](http://doc.rust-lang.org/doc/tutorial.html)和[語言參考](http://doc.rust-lang.org/doc/ rust.html)似乎過時了,他們提到'是'作爲關鍵字,但他們目前並沒有提及它 – ash 2012-02-15 20:08:36