Nim:无法访问过程返回的对象的字段
Nim: Can't access fields of object returned by a procedure
我正在尝试用 Nim 编写词法分析器。抱歉,如果这听起来有点愚蠢,因为我昨天开始使用 nim,那么我的问题是我创建了一个如下所示的类型
import position
type
Error* = object
pos_start : position.Position
pos_end : position.Position
name: string
details: string
然后我继续创建一个 returns 这种类型的实例的过程,
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)]
谢谢,如有任何帮助,我们将不胜感激。
好吧,一个小时后我终于意识到我的字段不是 public。对于未来的任何人,我将类型代码更改为
import position
type
Error* = object
pos_start* : position.Position
pos_end* : position.Position
name*: string
details*: string
它奏效了。万岁。
我正在尝试用 Nim 编写词法分析器。抱歉,如果这听起来有点愚蠢,因为我昨天开始使用 nim,那么我的问题是我创建了一个如下所示的类型
import position
type
Error* = object
pos_start : position.Position
pos_end : position.Position
name: string
details: string
然后我继续创建一个 returns 这种类型的实例的过程,
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)]
谢谢,如有任何帮助,我们将不胜感激。
好吧,一个小时后我终于意识到我的字段不是 public。对于未来的任何人,我将类型代码更改为
import position
type
Error* = object
pos_start* : position.Position
pos_end* : position.Position
name*: string
details*: string
它奏效了。万岁。