2013-07-15 34 views
1

我知道如果沒有其他東西被返回,F#函數會返回一個單元,但是這個函數返回一個字符串。有人可以幫我理解爲什麼它會返回一個單位嗎?爲什麼這個公式返回一個單位?

let rec processList aList str = 
    match aList with 
    | h::t -> let x = Regex.Replace(str, h, h, RegexOptions.IgnoreCase) 
       processList t x 
    | [] -> printfn "%s" str 

回答

4

該遞歸函數的停止情況 | [] - > printfn「%s」str

返回單位,因此該函數返回一個單位。另一個分支只能遞歸地調用相同的函數。

2

如果我們分析兩個遞歸分支,它們的返回類型必須相同。

第一分支具有一定的返回類型'a其爲processList

第二分支返回unit作爲返回值是的printfn返回類型。你可能想剛纔

| [] -> str 

或更復雜的情況下,你可以使用sprintf如下

| [] -> sprintfn "%s" str 
返回一個格式化字符串