lexer - 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)]
谢谢,任何帮助将不胜感激。
解决方案
好的,最后一个小时后,我意识到我的字段不是公开的。对于未来的任何人,我将类型代码更改为
import position
type
Error* = object
pos_start* : position.Position
pos_end* : position.Position
name*: string
details*: string
它奏效了。万岁。
推荐阅读
- css - CSS GRID 无法按顺序重新排列项目:;
- visual-studio - 安装 SQLite NuGet 包会安装包,但参考不可用。VS2019 社区
- r - 有没有一种简单的方法可以在不使用 dplyr::select() 的情况下订购大量列?
- javascript - 使用 $.ajax 向服务器请求不返回成功 - PHP
- python - Keras compile() 函数需要很长时间才能使用自定义损失函数
- php - Prepared statements, SQLSTATE[HY093]: Invalid parameter number
- instance - gcloud 对连接到实例的所有磁盘进行快照
- c++ - 用真值填充向量
- c# - WPF 分隔符背景颜色保持灰色
- php - WP Woocommerce 结帐页面。更改“下订单”按钮以通过电子邮件发送结帐表格