【问题标题】:Unexpected start of structured construct in definition. Expected '=' or other token F#定义中结构化构造的意外开始。预期的 '=' 或其他标记 F#
【发布时间】:2020-11-02 13:02:12
【问题描述】:

我正在尝试创建一个具有隐藏向量类型的向量库,但出现以下错误:

定义中结构化构造的意外开始。预期'=' 或其他令牌

我正在尝试了解模块的工作原理,我从一本书中获取了这个示例,我完全按照给定的方式复制了该示例,但仍然出现此错误。

Screenshot with code

给定的错误是:

`error FS0039: The value or constructor 'make' is not defined.

error FS0010: Unexpected start of structured construct in definition. Expected '=' or other token.

`

【问题讨论】:

  • 请提供minimal reproducible example,特别是不要粘贴截图而是提供代码。这样可以更轻松地重现问题并提供答案。

标签: f#


【解决方案1】:

F# 有 2 个用于 module 的 sintaxis

没有=的顶级模块

module Vector

type Vector = V of float * float
let (~-.) (V(x, y)) = V(-x, -y)

它作为namespacemodule 声明合二为一。 组件可以在与module Vector 相同的级别缩进,例如 书的例子。 F# interactive 无法识别此表单,因此您需要使用其他表单:

带有=的子模块:

module Vector =

    type Vector = V of float * float
    let (~-.) (V(x, y)) = V(-x, -y)

这需要它的组件在内部进一步缩进。

这里是文档: https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/modules

【讨论】:

    【解决方案2】:

    您需要删除第一个 type Vector 然后缩进模块:

    module Vector =
    
        type Vector = V of float*float
        let (~-.) (V(x,y)) = V(-x, -y)
        let make (x, y) = V(x, y)
    
        let a = make(1.0, 2.0) // V (1.0, 2.0)
    

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2020-03-30
      • 2015-10-02
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 2019-03-30
      相关资源
      最近更新 更多