Заметный дубль выбирает конверсию - PullRequest
0 голосов
/ 30 декабря 2011

Я изучаю RX (Reactive Extensions), я пытался использовать некоторые примеры кода из Интернета, исходный код был на C #:

var input = new[] {1,2,3,4,5,4}.ToObservable();
var output = input.Take(5).Select(x => x * 10);

output.Dump();

Я хочу использовать F #, чтобы сделать то же самое.Я загружаю RX и создаю F # windows-приложение, добавляю ссылку на System.Reactive.Моя IDE VS 2010 Ultimate, RX версия: 1.1.11111 Вот мой код:

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

let input = [1; 2; 3; 4; 5; 4].ToObservable()
let output = input.Take(5).Select(fun x -> printfn "%A" x)
printfn "%A" output
printfn "Done"

Я считаю, что это простая работа, однако в моей IDE ни C #, ни F # не дали никакой полезной информации,Кроме того, нет вывода. Dump (), который я могу использовать в C # или в F #.
Лямбда-выражение в F # не показывало никакой информации.
Вывод printfn "%A" показал эту информацию:

System.Reactive.Linq.Observable + SelectObservable`2 [System.Int32, Microsoft.FSharp .Core.Unit]

Дайте мне знать, если я что-то пропустил или мой коднеправильно.
Спасибо и счастливого Нового года всем вам!

Ответы [ 2 ]

1 голос
/ 02 января 2012

Вы должны узнать об Observables подробнее.Вы должны подписаться на наблюдаемую коллекцию.Также не стоит делать побочные эффекты в методе Select.Поэтому код должен выглядеть так:

use xs = [1; 2; 3; 4; 5; 4].ToObservable().Take(5).Subscribe(printfn "%A")
1 голос
/ 31 декабря 2011

Не знаю, почему вы хотите это сделать, но это дает ожидаемый вами результат.

let input = [1; 2; 3; 4; 5; 4].ToObservable()
let output = input.Take(5).ToEnumerable()
printfn "%A" output

Все, что вам нужно - это преобразовать #seq<int> в IObservable<int> и обратно.Я полагаю, что было бы более значимым, если бы вы связали несколько дополнительных преобразований перед вызовом ToEnumerable.

...