如何执行功能?

时间:2014-10-15 19:14:21

标签: f#

我读了一本名为Real World Functional Programming with F#和C#的书,有一个例子就是这样的

open System

let readInput() =      
    let s = Console.ReadLine()      
    let (succ, num) = Int32.TryParse(s)
    if (succ) then  
        Some(num)
    else          
        None

let readAndAdd1() =    
    match (readInput()) with 
    | None    -> None    
    | Some(n) -> 
        match (readInput()) with       
        | None    -> None       
        | Some(m) ->         
            Some(n + m)

printfn "Result - %A" readAndAdd1

它应该询问您两个数字,然后将它们一起添加。但我似乎并没有让它发挥作用。当我在LinqPad中尝试这个时,甚至在输入readInput()时出错。当我输入readInput时,它会询问我的第一个值,而不是第二个值。在F#Interactive中它可以工作,但它打印出Result - <fun:it@20>

我该如何运行此方法?

1 个答案:

答案 0 :(得分:3)

当你尝试

printfn "Result - %A" readAndAdd1 

在F#interactive中,你为printfn提供了标识符'readAndAdd1'这是一个函数。 如果你需要打印函数调用的结果,你应该像这样调用这个函数:

printfn "Result - %A" (readAndAdd1())

在这种情况下,F#interactive将等待两个输入并在之后打印结果。 F#交互输出:

> printfn "Result - %A" (readAndAdd1());;
2
3
Result - Some 5
val it : unit = ()
>