【发布时间】:2016-01-08 00:33:25
【问题描述】:
我正在通过实现我的一个小型 F# sn-p 来试验 Rust。
我正处于想要解构一串字符的地步。这是 F#:
let rec internalCheck acc = function
| w :: tail when Char.IsWhiteSpace(w) ->
internalCheck acc tail
| other
| matches
| here
..可以这样调用:internalCheck [] "String here" 其中:: 运算符表示右侧是“列表的其余部分”。
所以我查看了 Rust 文档,其中有一些解构向量的示例,如下所示:
let v = vec![1,2,3];
match v {
[] => ...
[first, second, ..rest] => ...
}
..等等。然而,这现在落后于slice_patterns 功能门。我尝试了类似的方法:
match input.chars() {
[w, ..] => ...
}
这告诉我功能门需要使用非稳定版本。
所以我下载了multirust 并安装了我能找到的最新的夜间版本 (2016-01-05),当我终于让 slice_patterns 功能正常工作时......我遇到了关于语法和“休息”的无尽错误(在上面的例子)是不允许的。
那么,有没有一种等效的方法来解构字符串,在 Rust 中利用 :: 类似的功能......基本上我想将 1 个字符与一个守卫匹配,并在后面的表达式中使用“其他所有内容”。
如果答案是“不,没有”,这是完全可以接受的。我当然无法在任何地方在线找到很多此类示例,并且切片模式匹配在功能列表中似乎并不高。
(如果我在 Rust 文档中遗漏了什么,我会很乐意删除这个问题)
【问题讨论】:
-
似乎对我有用:is.gd/h9U1SI。也许语法已经改变?仍然值得一个完整的答案。
-
@ArtemGr 是的,抱歉,这似乎有效。但是我似乎无法让它在字符串上工作。这是问题的重点(如果不清楚 - 我应该改写吗?)。
-
顺便说一下 @ArtemGr,感谢您提供游乐场链接 - 我不知道 Rust 有这样的游乐场(竖起大拇指)。
-
is.gd/WgkdSw 怎么样?游乐场似乎有一个临时问题,但在我的工作站上打印“匹配... 1匹配... 2”。