F# 编译错误

2023-12-22

我有以下导致编译错误的 F# 代码:

persistence.fs(32,21):错误 FS0072:根据此程序点之前的信息查找不确定类型的对象。在此程序点之前可能需要类型注释来约束对象的类型。这可以使查找得以解决。

错误出现在“serializer.write....”行

任何帮助,将不胜感激。

namespace persisitence
open System.Collections.Generic
open System
open System.IO

type LocalData<'T> =
    struct
        val mutable elements_ : 'T list
        val mutable lock_ : obj
        new(e: 'T list) = { elements_ = e ; lock_ = new obj() }
    end

type BinaryPersistenceOut<'T, ^W when ^W: (member write : ('T * BinaryWriter) -> unit)>(fn: string, serializer: ^W) as this = 
    let writer_ = new BinaryWriter(File.Open(fn, FileMode.Append))
    let mutable localdata_ = new LocalData<'T>([])
    let serializer_ = serializer
    let NUM_SECS_IN_MIN = 60
    let NUM_MSECS_IN_SEC = 1000
    let NUM_MIN_BETWEEN_COMMITS = 2
    let TIME_TO_WAIT = 15
    let closed_ = false

    let freq_ = NUM_MIN_BETWEEN_COMMITS * NUM_SECS_IN_MIN * NUM_MSECS_IN_SEC
    let path_ = fn
    let timer_ = new System.Timers.Timer((float) (NUM_MIN_BETWEEN_COMMITS * NUM_MSECS_IN_SEC) )

    let writetofile = 
        fun (arg: Timers.ElapsedEventArgs ) ->
            lock localdata_.lock_ ( fun () -> 
             if closed_ = false then
                for elem in localdata_.elements_ do
                    serializer.write(elem, writer_)
             )  

    do 
        timer_.Elapsed.Add(writetofile)

虽然如果你能调用的话那就太好了write功能类似于serializer.write(elem, writer_),你不能。你必须像这样调用它:

(^W: (member write : ('T * BinaryWriter) -> unit) (serializer, (elem, writer_)))

完整代码块:

type BinaryPersistenceOut<'T, ^W when ^W: (member write : ('T * BinaryWriter) -> unit)> (fn: string, serializer: ^W) as this = 
    let writer_ = new BinaryWriter(File.Open(fn, FileMode.Append))
    let mutable localdata_ = new LocalData<'T>([])
    let serializer_ = serializer
    let NUM_SECS_IN_MIN = 60
    let NUM_MSECS_IN_SEC = 1000
    let NUM_MIN_BETWEEN_COMMITS = 2
    let TIME_TO_WAIT = 15
    let closed_ = false

    let freq_ = NUM_MIN_BETWEEN_COMMITS * NUM_SECS_IN_MIN * NUM_MSECS_IN_SEC
    let path_ = fn
    let timer_ = new System.Timers.Timer((float) (NUM_MIN_BETWEEN_COMMITS * NUM_MSECS_IN_SEC) )

    let writetofile = 
        fun (arg: Timers.ElapsedEventArgs ) ->
            lock localdata_.lock_ ( fun () -> 
             if closed_ = false then
                for elem in localdata_.elements_ do
                    (^W: (member write : ('T * BinaryWriter) -> unit) (serializer, (elem, writer_)))
             )  

    do 
        timer_.Elapsed.Add(writetofile)

警告:这可以编译,但我不知道它是否符合您的要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

F# 编译错误 的相关文章

  • F# 的 timeit 函数

    我想写一些类似的东西 let timeit x a gt b let start System DateTime Now x let duration System DateTime Now start printfn time usage
  • 对 F# 联合类型列表进行操作

    这是我的问题的延续F 联合类型列表 https stackoverflow com questions 13770911 f list of union types 感谢有用的反馈 我能够创建一个列表Reports with Report要
  • 函数式 GUI 编程可能吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我最近发现了 FP bug 试图学习 Haskell 到目前为止所看到的东西给我留下了深刻的印象 一流的函数 惰性求值和所有其他好处 我还不是专
  • 如何从复合泛型类型中检索值?

    如何从泛型中检索值 具体来说 我正在尝试以下操作 Test let result Validate goodInput How to access record let request getRequest result 这是代码 type
  • 使用 F# 的爱因斯坦之谜解决方案 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在找爱因斯坦之谜 http en
  • 没有带有常量“模板参数”的 F# 泛型?

    我突然想到 F 泛型似乎不接受常量值作为 模板参数 假设有人想创建一种类型RangedInt这样 它的行为类似于 int 但保证只包含整数值的子范围 一种可能的方法是建立受歧视的工会 类似于 type RangedInt Valid of
  • 如何统计字符串中特定字符的出现次数

    我不知道从哪里开始检查字符串中特定字符的 n 次出现 我已经列出了我认为是该功能框架的基本轮廓 但我不确定内容是什么 let countCharFromNth getStr string chkdChar char if getStr Le
  • F# 设置带有参数的 SQLCommand 的最佳方法

    我的 F 程序需要与 SQL Server 通信 在一部分中我有这样的事情 let workFlowDetailRuncommand new SqlCommand query econnection workFlowDetailRuncom
  • 类型 x 比值更难访问

    这是我的代码的抽象 module RootModule module private SubModule I want everything in this module to be inaccessible from outside th
  • 如何在 x 轴上显示每个元素的标签?

    我有包含文件名和编号的元组序列 我想绘制柱形图 其中 X 轴上有文件名 我的问题是现在 X 轴下仅显示 3 个标签 文件名 这可能是因为屏幕无法容纳更多内容 还是X轴间隔错误 如何让图表显示所有文件名 也许有办法将这些标签逆时针旋转 90
  • 如何搭建Windows Phone开发环境并使用F#开发应用程序?

    我已经下载了Windows Phone开发工具 但我不知道如何使用F 来开发应用程序 目前是C 将 F 和 Windows Phone 模板安装到 Visual Studio 中可以让生活变得更轻松 如果您打开 Visual Studio
  • 如何判断 F# 函数是否是纯函数?

    假设我有这两个 F 函数 let sq x x x let tm DateTime Now 显然 sq 是纯的 因为它对于给定的输入总是返回相同的值 而 tm 是不纯的 因为每次调用它时都会返回不同的值 一般来说 有没有一种方法可以确定 F
  • 我缺少什么:可以使用多个参数进行函数组合吗?

    我了解 F 中函数组合的基础知识 例如所述here http blogs msdn com b chrsmith archive 2008 06 14 function composition aspx 不过 也许我错过了一些东西 这 gt
  • F# 参数传递

    我一直认为 F 有两种不同的方式来传递参数 柯里化风格和元组风格 这实际上是正确的吗 是不是很简单一种风格 柯里化风格和参数可以是简单值或元组 e g someFunc a b 这不是一个函数吗one咖喱风格的参数恰好是一个元组 因此允许我
  • 如何在插件场景中实现程序集绑定重定向?

    我有一个plugin P延伸和application A NET40 我无法控制 P 程序集 NET40 有一个shared dependency D NET35 P和D都依赖于FSharp Core 但版本不同 P是针对FSharp Co
  • 如何在 F# 中将对象转换为泛型类型列表

    在下面的代码片段中 我的目的是将 System Object 可能是 FSharpList 转换为它所持有的任何泛型类型的列表 match o with list lt gt gt addChildList o gt list lt gt
  • F# 在类型提供程序内的类型扩展函数中生成类型

    我有以下问题 在我的类型提供程序中 我需要使用一个返回此泛型类型实例的方法来扩展我之前定义的泛型类型 我的意思是 假设我们有 type receiveType lt a gt class val Next int val Type stri
  • 当两个模式共享“when”子句时,模式匹配不完整

    A 共同的惊喜 https stackoverflow com q 18691622 2314532对于 F 初学者来说 以下事实是不完全匹配 let x y 5 10 match something with when x lt y gt
  • 将 Foq 与 F# 函数类型结合使用

    例如 我使用 F 类型定义来防止函数之间的硬依赖 type IType1 int gt int type IType2 int gt string let func1 i int int i i let func2 i int string
  • Async.StartChild是否存在内存泄漏?

    当我运行以下测试 使用 F 2 0 构建 时 我得到 OutOfMemoryException 在我的系统上大约需要 5 分钟才能达到异常 如果它作为 x86 进程运行 则为 i7 920 6gb ram 但无论如何我们都可以在任务管理器中

随机推荐

  • 在 JFrame 中绘制 Graphics2D

    我正在制作一个 2d 垂直射击游戏 其中除了图形之外的所有内容都已编码 并且可以工作 我以前没有使用过 Graphics 类 所以这对我来说是全新的 以下是我用来将所有内容绘制到 JFrame 的代码 public void paintAl
  • C 中的滚动中位数 - Turlach 实现

    有谁知道 C 语言中是否有 Turlach 滚动中值算法的干净实现 我在将 R 版本移植到干净的 C 版本时遇到问题 看here https stackoverflow com questions 1309263 rolling media
  • 如何在四边形中找到随机点?

    我必须能够为飞行模拟的航路点设置随机位置 数学挑战很简单 在四边形内找到一个随机位置 该点位于任何位置的机会均等 视觉上是这样的 ABCD 四边形示例如下 答 21417 78 37105 97 乙 38197 32 24009 74 C
  • 如何使用 python matplotlib 中的 set_position 方法固定轴位置?

    我认为这很容易 但我搜索了互联网和 matplotlib 用户邮件列表 但无法找到答案 ax2 是图 fig 中 ax 轴内的插入轴 我通过以下方式制作 http matplotlib sourceforge net examples py
  • 上述查询中表空间的用途是什么?

    CREATE TABLE ts pcode tb incase TABLESPACE USERS AS SELECT FROM ts pcode tb 上述查询中表空间的用途是什么 表空间是数据库中数据文件的逻辑组 数据库通常包含至少一个表
  • Dart 使用 RegExp 从 String 中获取轨迹元素

    当我从我们的网站 url 检索数据时 会在其余 api 字段之一中返回此输出 并且我尝试查找是否tracks包含我从下面的内容中获取网址tracks来源是我需要得到 String test div class n div class div
  • symfony assetic 在请求文件时给出 500 错误

    EDITED 我正在使用 assetic 和 symfony2 每次我尝试加载页面时 在请求 JS 和 CSS 文件时 我的浏览器都会收到 500 错误 如果我在地址栏中输入该资源的地址 我就可以成功加载其文件 更奇怪的是 每当 Symfo
  • 如何配置用户上下文/表?

    随着新的 ASP NET MVC 5 预览版发布 如何配置用户上下文 表 在 MVC 4 中 我只使用我自己的 User 类 然后将 WebSecurity 初始化指向它 如下所示 WebSecurity InitializeDatabas
  • Fortran编译器

    我正在 Mac 上开发 Android 应用程序 有谁知道android 的fortran 编译器吗 我打算从 C 例程调用一些 Fortran 例程 然后用 java 类包装 C 例程并使用 JNI 来执行此操作 但是 我无法编译 For
  • 将 lambda 表达式应用于数组元素时出现 ValueError

    目前我在处理 numpy array 4x1 即时遇到错误 1 96113883 3 46144244 5 075857 1 77550086 使用 lambda 函数f lambda x x if x gt 0 else x 0 01 错
  • 通过 C# 代码更改货币

    我使用以下内容来显示金额 String Format 0 C item Amount 这个显示器 9 99 没关系 但是如果我希望应用程序能够控制货币并能够更改货币 该怎么办 9 99 如何通过代码更改货币格式 货币符号由 CultureI
  • haskell 检查用户输入错误

    我在 haskell 中编写应用程序 我想知道这是检查用户输入是否正确的最佳方法 例如当我要求 int 时它是 int 还是当要求格式良好的日期时它是日期 感谢帮助 Use maybeRead 该函数是一个候选函数 包含在 Haskell
  • 在 Windows 上配置 package.json

    我正在尝试在 Windows 上管理 React 项目的配置 它之前在 Mac 上运行 我在用着yarn build 在 的里面package json scripts gt build被配置为 rm rf deployment stati
  • Ruby:将两个哈希合并为一个并连接值

    2 hash h1 s1 gt 2009 7 27 s2 gt 2010 3 6 s3 gt 2009 7 27 h2 s1 gt 12 29 15 s2 gt 10 00 17 s3 gt 12 25 52 我想将两个哈希合并为一个 如下
  • sbt 编译时警告:类型模式 List[String] 中的非变量类型参数 String

    我的 sbt 显示警告消息 non variable type argument String in type pattern List String the underlying of List String is unchecked s
  • Eclipse 意外退出 2022-06 [重复]

    这个问题在这里已经有答案了 我开始学习Java 几天来一直遇到这个错误 我安装了 eclipse 并且运行得很好 第二天 当我尝试打开该应用程序时 它打不开 并且收到一条消息 无法打开应用程序 Eclipse 进而 Eclipse 意外退出
  • Python 和 urllib2:如何使用参数发出 GET 请求

    我正在构建一个 API API 它基本上是内部 REST Web 服务的包装器 Web 应用程序将向该服务发出大量请求 一些Web服务调用需要是GET而不是POST 而是传递参数 是否有一种 最佳实践 方法将字典编码为查询字符串 例如 fo
  • 有选择地从 MySQL 中删除大部分重复的记录

    我有一张桌子 PRICE UPDATE id int 5 auto increment primary unique part number varchar 10 non null price float 10 2 non null 一些p
  • 如何从 SQL Server 导出到 XML

    从 SQL Server 表或视图 导出到 XML 的最简单方法是什么 这就是我到目前为止所做的 执行Sql任务 SELECT FROM Production Product FOR XML AUTO TYPE ROOT Data 结果集
  • F# 编译错误

    我有以下导致编译错误的 F 代码 persistence fs 32 21 错误 FS0072 根据此程序点之前的信息查找不确定类型的对象 在此程序点之前可能需要类型注释来约束对象的类型 这可以使查找得以解决 错误出现在 serialize