F# 您可以通过“点”符号来使用它。类似于seqString.Subscribe(fun s->Console.WriteLine)之类的东西可以工作。您不需要(事实上也不应该)处理订阅here@PaulBetts:(a)Console.ReadLine()在内

F# 您可以通过“点”符号来使用它。类似于seqString.Subscribe(fun s->Console.WriteLine)之类的东西可以工作。您不需要(事实上也不应该)处理订阅here@PaulBetts:(a)Console.ReadLine()在内,f#,system.reactive,F#,System.reactive,您可以通过“点”符号来使用它。类似于seqString.Subscribe(fun s->Console.WriteLine)之类的东西可以工作。您不需要(事实上也不应该)处理订阅here@PaulBetts:(a)Console.ReadLine()在内使用块保证只有在**按键盘上的输入后,才能按照原始C#代码的建议进行处置;(b)更重要的是,Observable.Range(1,5)相当于Observable.Range(1,5,Scheduler.CurrentThread)使代码有效地单


您可以通过“点”符号来使用它。类似于
seqString.Subscribe(fun s->Console.WriteLine)之类的东西可以工作。您不需要(事实上也不应该)处理订阅here@PaulBetts:(a)
Console.ReadLine()
内使用
块保证只有在**按键盘上的
输入
后,才能按照原始C#代码的建议进行处置;(b)更重要的是,
Observable.Range(1,5)
相当于
Observable.Range(1,5,Scheduler.CurrentThread)
使代码有效地单线程化,所以在这里处理订阅是绝对安全的,我为什么不应该呢?嗨,Gene Belitski:非常感谢,你的代码工作正常。然而,我很难知道什么时候使用“use”,什么时候使用“using”,我认为只有C使用“using”,而不是F!因为IObservable.Subscribe的语义是,仅当您希望提前终止订阅时才处理它。在这种情况下,您不想过早地处理它,唯一的办法是将源文件安排在-context@JohnJohn:您可能需要查找
使用
使用
之间差异的解释。但您也可以安全地坚持使用
use
,这是一种语法糖形式的绑定,确保在
IDisposable
值超出范围时自动调用
Dispose()here@PaulBetts:(a)
Console.ReadLine()
内使用
块保证只有在**按键盘上的
输入
后,才能按照原始C#代码的建议进行处置;(b)更重要的是,
Observable.Range(1,5)
相当于
Observable.Range(1,5,Scheduler.CurrentThread)
使代码有效地单线程化,所以在这里处理订阅是绝对安全的,我为什么不应该呢?嗨,Gene Belitski:非常感谢,你的代码工作正常。然而,我很难知道什么时候使用“use”,什么时候使用“using”,我认为只有C使用“using”,而不是F!因为IObservable.Subscribe的语义是,仅当您希望提前终止订阅时才处理它。在这种情况下,您不想过早地处理它,唯一的办法是将源文件安排在-context@JohnJohn:您可能需要查找
使用
使用
之间差异的解释。但您也可以安全地坚持使用
use
,这是绑定的一种语法糖形式,确保在
IDisposable
值超出范围时自动调用
Dispose()
  var seqNum = Observable.Range(1, 5);
  var seqString = from n in seqNum
                  select new string('*', (int)n);
  seqString.Subscribe(str => { Console.WriteLine(str); });
  Console.ReadKey();
#light
open System
open System.Collections.Generic
open System.Linq
open System.Reactive
open System.Reactive.Linq
open System.Reactive.Subjects
open System.Threading
open System.IO

let seqNum = Observable.Range(1, 5)
let seqString = from n in seqNum
                select new string('*', (int)n)
Console.ReadLine() |> ignore
String.replicate n "*"
[1 .. 5]
|> Seq.map (fun i -> String.replicate i "*")
let s = string('*', 3);; // tuple to string
// val s : string = "(*, 3)"
let s = new String('*', 3)
// val a : String = "***"
let seqNum = seq {1..5}
let seqString = seq { for n in seqNum -> new String('*', n) }
open System
open System.IO
open System.Reactive
open System.Reactive.Linq

let seqString = Observable.Range(1,5).Select(fun x -> String.replicate x "*")
using (seqString.Subscribe (fun x -> printfn "%s" x))
    (fun _ -> Console.ReadLine() ) |> ignore
seqString.Subscribe (printfn "%s") |> ignore
do
    use subscription = seqString.Subscribe(printfn "%s")
    Console.ReadLine() |> ignore