我是F#的新手,我有这段代码:
if s.Contains("-") then
let x,y =
match s.Split [|'-'|] with
| [|a;b|] -> int a, int b
| _ -> 0,0
请注意,我们在分割字符串之前验证字符串中是否有“ - ”,因此匹配实际上是不必要的。我可以用选项重写吗?
我更改了这段代码,原来是这个(但我收到了警告):
if s.Contains("-") then
let [|a;b|] = s.Split [|'-'|]
let x,y = int a, int b
注意:我正在分割一系列数字(范围以字符串表示),然后创建表示范围最小值和最大值的整数值。
答案 0 :(得分:4)
匹配不是必需的,字符串可能是“1-2-3”,你将获得一个三元素数组。
试图摆脱比赛,这是你的朋友,而不是你的敌人。 :)你的敌人是错误的预验证尝试(“如果包含”逻辑,这是错误的。)
我想你可能会喜欢这个由两部分组成的博客系列。
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!180.entry
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!181.entry
修改
关于Some
/ None
评论,是的,您可以
let parseRange (s:string) =
match s.Split [|'-'|] with
| [|a;b|] -> Some(int a, int b)
| _ -> None
let Example s =
match parseRange s with
| Some(lo,hi) -> printfn "%d - %d" lo hi
| None -> printfn "range was bad"
Example "1-2"
Example "1-2-3"
Example "1"
其中parseRange的返回值是Some
(成功)或None
(失败),程序的其余部分可以稍后根据该值做出决定。