首页 > 解决方案 > Nim:无法访问过程返回的对象的字段

问题描述

我试图用 Nim 编写一个词法分析器。抱歉,如果这听起来有点愚蠢,因为我昨天开始使用 nim,所以我的问题是我创建了一个如下所示的类型

import position

type
  Error* = object
    pos_start : position.Position
    pos_end : position.Position
    name: string
    details: string

然后我继续创建一个返回这种类型实例的过程,

proc IllegalCharacterError*(pos_start : position.Position, pos_end : position.Position, details : string) : Error =
  return Error(pos_start: pos_start, pos_end: pos_end, name: "IllegalCharacterError", details: details)

现在,一切正常,除非我从另一个模块尝试访问此返回实例的字段时出现错误

from errors import nil
from position import nil

var current_char = "2"
let pos = position.Position(idx: -1, ln: 0, col: -1, fn: fn, ftxt: text)
let error = errors.IllegalCharacterError(pos, pos, current_char)
echo error.name

最后一行是抛出错误的那一行,下面是编译过程中出现的错误

Error: undeclared field: 'name' for type errors.Error [declared in C:\Users\Mlogix\Desktop\testNim\errors.nim(4, 3)]

谢谢,任何帮助将不胜感激。

标签: lexernim-lang

解决方案


好的,最后一个小时后,我意识到我的字段不是公开的。对于未来的任何人,我将类型代码更改为

import position

type
  Error* = object
    pos_start* : position.Position
    pos_end* : position.Position
    name*: string
    details*: string

它奏效了。万岁。


推荐阅读