【问题标题】:This expression was expected to have type FSI_0024.xxx but here has type FSI_0017.xxx此表达式应为 FSI_0024.xxx 类型,但此处为 FSI_0017.xxx 类型
【发布时间】:2016-12-05 23:21:56
【问题描述】:

我是 F# 的新手,如果这看起来太愚蠢,我很抱歉。我正在尝试通过FileSystemWatcher 收听文件创建和删除事件。现在我想创建一个观察者来显示基于在目录中添加和删除的文件的更改计数。因此,每当将文件添加到目录时,计数就会增加 1,而当文件被删除时,计数会减少。我的代码如下:

let watcher = new FileSystemWatcher(@".")
watcher.EnableRaisingEvents <- true

let created = watcher.Created

let deleted = watcher.Deleted

type Change =
  | Addition of string
  | Removal  of string

let a = created |> Observable.map (fun eventArgs ->
  Addition eventArgs.Name)

let r = deleted |> Observable.map (fun eventArgs ->
  Removal eventArgs.Name)

let changes = Observable.merge a r

let collector count state =
    match state with
    | Addition x           -> count + 1
    | Removal x            -> count - 1

let createdCount =
    changes |> Observable.scan (fun count s -> collector count s) 0

但它在Observable.scan 上给出以下错误:

This expression was expected to have type
    FSI_0024.Change    
but here has type
    FSI_0017.Change  

类型相同,但我不明白这个 FSI_xxxx 部分。可能是什么问题?

【问题讨论】:

  • 重置您的 fsi 会话。有一些旧定义会导致问题
  • @JohnPalmer 谢谢先生节省了我的时间。

标签: f# pattern-matching reactive-programming filesystemwatcher


【解决方案1】:

当编译器使用相同类型的旧版本时会导致这种错误。

最简单的解决方案是重启 FSI 会话

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多