F#匹配->;
我想做一些类似的东西(Nemerle语法)F#匹配->;,f#,nemerle,F#,Nemerle,我想做一些类似的东西(Nemerle语法) 关于F#那么F#是真的吗?如果我理解正确的话,您希望为变量赋值作为模式的一部分。在F#中没有对这一点的直接支持,但您可以定义一个参数化的活动模式: let (|Let|) v e = (v, e) match stt with | Let "Summ" (st, 1) | Let "AVG" (st, 2) -> srintf "%s ..." st Let之后的字符串是模式的一个参数(作为v的值传入)。然后,该模式返回一个包含绑定值和原
关于F#那么F#是真的吗?如果我理解正确的话,您希望为变量赋值作为模式的一部分。在F#中没有对这一点的直接支持,但您可以定义一个参数化的活动模式:
let (|Let|) v e = (v, e)
match stt with
| Let "Summ" (st, 1)
| Let "AVG" (st, 2) -> srintf "%s ..." st
Let
之后的字符串是模式的一个参数(作为v
的值传入)。然后,该模式返回一个包含绑定值和原始值的元组(因此您可以在元组的第二个参数中匹配原始值)。对此没有直接支持,但您也可以模拟如下效果:
let 1, st, _ | 2, _, st = stt, "Summ", "AVG"
sprintf "%s %a" st summbycol (counter, stt)
关于F#,我学到了一件事:活动模式可以做任何事情:)@Juliet:是的,它们真的很强大。非常有趣:你可以使用模式匹配和备选方案,而无需使用
匹配
或函数
关键字。我想知道这是否是一个官方特写?@wmeyer:这是一个非常正式的特写。认为模式只出现在匹配
或函数
表达式之后的想法是一种常见的误解。函数参数也是模式,因此您可以编写让f((a,b),(c,d))=..
。这是ML相对于Lisp所取得的最大进步之一。试着让1,st,2,st=1,sum,AVG设1,st,| 2,|,st=2,“求和”,“平均”代码>@JonHarrop有没有机会摆脱警告?“stdin(2,5):警告FS0025:此表达式的模式匹配不完整。例如,值“(0,,)”可能表示模式未涵盖的情况。”@stej您可能希望在or模式的后半部分将文字2
模式替换为catchall。
。
let 1, st, _ | 2, _, st = stt, "Summ", "AVG"
sprintf "%s %a" st summbycol (counter, stt)