注意 我們不能在模式匹配中放入lambda 表示式

2022-07-04 21:00:11 字數 862 閱讀 9834

以下**在vs2012中不能通過編譯,你知道麼?知道為什麼麼?

1

let f0 x = x % 2 = 0

2let f1 x = x % 2

<> 034

let ( | even | _ | ) f (x:int) = if f(x) then some(math.sign(x)) else

none

5let ( | odd | _ | ) f (x:int) = if f(x) then some(math.sign(x)) else

none67

let f (x:int

) =

8match x with

9 | even (fun x -> x % 2 = 0) sign-> sprintf "

even sign=%d

"sign

10 | odd f1 sign-> sprintf "

odd sign=%d

" sign

編譯器會在關鍵字」fun」那裡報乙個錯誤,抱怨「unexpected keyword 『fun』 in pattern. expected 『)』 or other token」 。見如下截圖:

你有想過這個編譯錯誤僅僅是因為我們不能在模式裡面放入lambda表示式麼?如果是這樣的話,那麼恭喜你,你猜對了!j

似乎這個錯誤資訊會誤導我們去寫很多的「)」或者其它的一些瘋狂的繞過去的舉措。如果編譯器直接告訴使用者我們不支援它那就好了。不管怎樣,如果你知道了這個點,那麼我們就不會陷入困境了。

不能在安全模式中啟動這項服務

背景 進入到安全模式後,再進入到正常啟動模式後,電腦就不正常了,開機進入到桌面特別久,右鍵也不正常,各種慢,office也不能使用,瀏覽器也打不開。各種找問題,費了很長時間。最終通過如下方法解決了問題 今天被我遇到了,網上看了很多方法,終於找到了解決的,我的是win10系統進入安全模式?然後重啟電腦...

不能在finally塊中return

try catch塊中永遠返回finally中return的值 錯誤 static boolean f finally 錯誤分析 在這個應用場景中,不要用return來退出finally語句塊,因為finally語句塊都會被執行到,這樣try程式塊中執行正常也會在finally中退出,不會再回到tr...

我們為何不能在下班的時候看到太陽

到現在,我已經畢業七年了,包括實習期,換過6份工作,待過6個公司,最長的三年,最短的三天。除了第乙個實習期間能夠五點半下班,後面所有的工作都是晚上才能下班,下班的時候只能看到路燈,看不到太陽。排除工作內容以及收入,我最懷念的還是那份五點半下班的實習工作。準時下班奔赴食堂,然後或者在夕陽下散步或者在籃...