gpt4 book ai didi

f# - 编译器错误 "Incorrect number of type arguments to local call"

转载 作者:行者123 更新时间:2023-12-03 09:56:14 28 4
gpt4 key购买 nike

在使用带有度量单位类型参数的自定义类型时,我遇到了编译器错误“本地调用的类型参数数量不正确”,我不明白为什么。

这个问题经历了很多编辑。现在看起来该错误很可能是由编译器或 IDE 错误引起的。

我可以将其缩小到以下 (尝试复制时请阅读以下几点) :

type R<[<Measure>] 'u> (f : float<'u>) =
member r.Member = f

let get (r : R<_>) = r.Member
let foo =
let problem _ = List.map get
problem // Error: Incorrect number of type arguments to local call

最后一行给出了错误,这特别奇怪,因为它只是返回一个已经定义的标识符。我正在编译为库或可执行文件。繁殖的一些重要观察:
  • IntelliSense 不会预测此错误。需要实际编译才能看到它。
  • 使用优化编译时我还没有看到错误。 (为了重现,使用例如 Visual Studio 中的默认调试编译。感谢 Freenode 上的 zapu 指出这一点。)
  • 我还没有看到 F# 交互中的错误。
  • 去掉problem的无用参数( _ )使错误消失。
  • 移动 problem 的 let-binding出 foo使错误消失。这可能与作为 F# 函数的编译有关吗?我听说这是由 problem 类型周围的附加括号表示的。 .
  • 删除计量单位使用会使错误消失。
  • 标记 probleminline使错误消失。

  • 许多看似无关的更改消除了错误。但在实际用例中并不是那么容易,尤其是当我在尝试之前不知道更改是否修复了错误时。

    对于这方面的任何提示,我都会很高兴。是什么原因造成的?它是一个错误吗?如果是,它是否已知?如何避免?

    版本 这已使用 F# 的 3.0 到 3.1.2 版本进行了测试。我安装了新的 Visual Studio 2013 社区版并使用它提供的版本进行了测试,结果相同。它也出现在 Visual Studio 2012 (F# 3.0) 中。

    更新:我已经要求其他人对此进行测试,并且该行为通常可以在 Visual Studio 2012 或 2013 中重现。

    最佳答案

    这确实是一个错误。我报告了它,它是由 Andrew Kennedy 于 2015-01-30 修复的; see this issue report for Visual F# on Github .

    有趣的副作用:这个问题的荒谬代码最终成为回归测试。 (特此为公共(public)领域,以防万一)

    F# 的 future 版本应该不再有这个问题。 感谢所有帮助复制、分析和修复它的人!

    关于f# - 编译器错误 "Incorrect number of type arguments to local call",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27160166/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com