我想鞏固下面幾行:如何將兩個函數調用合併爲一個?
let result1 = add (numbers, ",")
let result2 = add (numbers, "\n")
弄成這個樣子:
let resultX = add (numbers, ",") |> add (numbers, "\n")
我可以撰寫功能也是這樣嗎?
注:
我學習F#和,如果這個問題似乎是愚蠢的道歉。
的代碼如下:
module Calculator
open FsUnit
open NUnit.Framework
open System
let add (numbers:string) =
let add (numbers:string) (delimiter:string) =
if (numbers.Contains(delimiter)) then
numbers.Split(delimiter.Chars(0)) |> Array.map Int32.Parse
|> Array.sum
else 0
let result1 = add numbers ","
let result2 = add numbers "\n"
if (result1 > 0 || result2 > 0) then
result1 + result2
else let _ , result = numbers |> Int32.TryParse
result
測試:
[<Test>]
let ``adding empty string returns zero``() =
let result = add ""
result |> should equal 0
[<Test>]
let ``adding one number returns number``() =
let result = add "3"
result |> should equal 3
[<Test>]
let ``add two numbers``() =
let result = add "3,4"
result |> should equal 7
[<Test>]
let ``add three numbers``() =
let result = add "3,4,5"
result |> should equal 12
[<Test>]
let ``line feeds embedded``() =
let result = add "3\n4"
result |> should equal 7
修訂
我收到以下錯誤:
The type 'int' does not match the type 'string'
let add (numbers:string) =
let add (numbers:string) (delimiter:string) =
if (numbers.Contains(delimiter)) then
numbers.Split(delimiter.Chars(0)) |> Array.map Int32.Parse
|> Array.sum
else 0
let resultX = numbers |> add ","
|> add "\n"
實現反饋:
let add (numbers:string) =
let add (numbers:string) (delimiters:char array) =
if numbers.Length = 0 then 0
else numbers.Split(delimiters) |> Array.map Int32.Parse
|> Array.sum
let delimiters = [|',';'\n'|]
add numbers delimiters
您是否要求每個分隔符都是通過單獨調用add函數完成的?你想了解函數組合還是試圖對字符串求和?如果你試圖總結字符串,我建議你做一個調用將所有分隔符作爲數組傳遞給[Split](https://msdn.microsoft.com/en-us/library/b873y76a(v = vs .110).aspx)方法。 –
我們應該提出有關「類型'int'與類型'string'不匹配的問題」一個單獨的問題。如果你可以問它,我可以把答案的那部分移到它。這實際上是兩個問題,另一部分需要更容易找到。 –