F#RX 1到100个代码样本的总和

时间:2011-12-29 18:54:33

标签: f#

我正在学习RX(Reactive Extensions),我试图使用来自互联网的一些代码示例,源代码在C#中:

var input = Observable.Range(1, 100); 
input.Sum().Subscribe(x => Console.WriteLine("The Sum is {0}", x)); 

由于我没有真正“说出”C#,所以我想用F#做同样的事情。 我下载了RX,并创建了一个F#windows应用程序,添加了对System.Reactive的引用。我的IDE是VS 2010 Ultimate,RX版本是:1.1.11111 这是我的代码:

#light
open System
open System.Collections.Generic
open System.ComponentModel
open System.Linq
open System.Text
open System.Reactive
open System.Reactive.Linq

let input = Observable.Range(1, 100)
let x = input.Sum().Subscribe()
printfn "%A" x

结果应该是5050,因为1到100的总和是5050.但是,我只能看到: System.Reactive.AutoDetachObserver`1 [System.Int32]

请告诉我如何查看5050的结果。 我希望C#代码也适用于F#。如果没有,请让我知道我能做些什么。 谢谢,祝大家新年快乐!

1 个答案:

答案 0 :(得分:2)

Subscribe方法将函数作为其参数(x => foo是C#中的匿名函数(lambda表达式))。所以你也应该用函数作为参数调用它:

let input = Observable.Range(1, 100)
input.Sum().Subscribe(fun x -> printfn "%A" x)

或者

let input = Observable.Range(1, 100)
input.Sum().Subscribe(printfn "%A")