2011-04-20 48 views
3

較短的方式,我有一個返回一個元組的函數:寫匹配

let rec pack l = 
      let combine = List.fold packFunction (' ',[], []) l 
      match combine with 
          | (_,b,a) -> b::a |> List.rev |> List.tail 

有沒有辦法來提取元組的部分,而無需使用匹配的語句?

即ID喜歡(一_,B),而不使用匹配語句

+1

聽起來像是你可能會發現這個啓發:http://fsharpnews.blogspot.com/2011/01/patterns-are-everywhere.html – 2011-04-21 08:58:29

回答

6

像這樣的東西來獲得B和A出來的?

let rec pack l = 
    let _,b,a = List.fold packFunction (' ',[], []) l 
    b::a |> List.rev |> List.tail 

你總是可以直接從元組中提取:

let a,b = (1,1) 

let a,b = functionWhichReturnsTuple 
+0

那麼明顯!這很完美,謝謝 – Marcom 2011-04-20 21:01:28

2

模式匹配可不僅僅是match ES等很多地方都可以使用。在這種情況下,它不會出現,你需要combine在所有(也沒有出現的pack需要遞歸)...

let pack l = 
    let _, b, a = List.fold packFunction (' ', [], []) l 
    b::a |> List.rev |> List.tail 
1

另一種方式把它(圖案匹配通過拉姆達參數) :

let rec pack l = 
    List.fold packFunction (' ',[], []) l 
    |> fun (_,b,a) -> b::a |> List.rev |> List.tail