注意:我们不能在模式匹配中放入lambda 表达式
2012-06-08 17:30
99 查看
以下代码在VS2012中不能通过编译,你知道么?知道为什么么?
编译器会在关键字”fun”那里报一个错误,抱怨“Unexpected keyword ‘fun’ in pattern. Expected ‘)’ or other token” 。见如下截图:
![](http://pic002.cnblogs.com/images/2012/365634/2012060817285812.png)
你有想过这个编译错误仅仅是因为我们不能在模式里面放入lambda表达式么?如果是这样的话,那么恭喜你,你猜对了!J
似乎这个错误信息会误导我们去写很多的“)”或者其它的一些疯狂的绕过去的举措。如果编译器直接告诉用户我们不支持它那就好了。不管怎样,如果你知道了这个点,那么我们就不会陷入困境了。
let f0 x = x % 2 = 0 let f1 x = x % 2 <> 0 let ( | Even | _ | ) f (x:int) = if f(x) then Some(Math.Sign(x)) else None let ( | Odd | _ | ) f (x:int) = if f(x) then Some(Math.Sign(x)) else None let f (x:int) = match x with | Even (fun x -> x % 2 = 0) sign-> sprintf "even sign=%d" sign | Odd f1 sign-> sprintf "odd sign=%d" sign
编译器会在关键字”fun”那里报一个错误,抱怨“Unexpected keyword ‘fun’ in pattern. Expected ‘)’ or other token” 。见如下截图:
![](http://pic002.cnblogs.com/images/2012/365634/2012060817285812.png)
你有想过这个编译错误仅仅是因为我们不能在模式里面放入lambda表达式么?如果是这样的话,那么恭喜你,你猜对了!J
似乎这个错误信息会误导我们去写很多的“)”或者其它的一些疯狂的绕过去的举措。如果编译器直接告诉用户我们不支持它那就好了。不管怎样,如果你知道了这个点,那么我们就不会陷入困境了。
相关文章推荐
- 注意:我们不能在模式匹配中放入lambda 表达式
- QRegExp一些注意事项(正则表达式和模式匹配)
- scala基础31-模式匹配之正则表达式
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- JavaScript权威指南_83_第10章_正则表达式的模式匹配_10.1.2-正则表达式的定义-字符类
- 模式匹配的类型测试不能识别List<’a>
- Python学习(正则表达式与模式匹配上篇)
- JavaScript权威指南_88_第10章_正则表达式的模式匹配_10.2-用于模式匹配的String方法
- Python学习(正则表达式与模式匹配下篇)
- java中提供了对正则表达式的支持。 有的时候,恰当地使用正则,可以让我们的工作事半功倍! 如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码。 注意:只填写缺少代码,不要
- 常用正则表达式匹配模式(java)
- SQL 正则表达式使模式匹配和数据提取变得更容易
- php正则表达式如何找到匹配模式中的最后一组
- Grep模式匹配的正则表达式
- JS学习十二天----正则表达式的模式匹配
- 常用正则表达式模式匹配学习笔记
- 随笔:linux中正则表达式BRE模式下的特殊匹配字符
- JavaScript权威指南_84_第10章_正则表达式的模式匹配_10.1.3-正则表达式的定义-重复
- PHP正则表达式常用匹配模式
- Scala中的正则表达式、与模式匹配结合的的Reg代码实战