iolanguage - Iolang 代码在文件和 relp 中的工作方式不同
问题描述
这是我的代码:
OperatorTable addOperator("xor", 11)
OperatorTable println
true xor := method(bool, if(bool, false, true))
false xor := method(bool, if(bool, true, false))
true xor(false)
true xor false
当我将它输入 relp 时,它可以正常工作。但是,当我尝试在文件中运行它时,它的true xor false
工作方式很奇怪。
解决方案
发生这种情况是因为运算符表代码像其他代码一样被解析一次。这意味着如果您想在您首先定义它的文件中使用它,您需要将您的操作员表代码放在一个单独的文件中。然后doFile("...")
在与您的操作员表内容相同的文件中进行调用。
关于 Io 要了解的一件事是,它的解析器除了“重写运算符”之外没有多个阶段——这意味着,如果在解析文件时运算符在表中,它将使用这些优先级来根据这些规则在需要的地方添加括号。但是,如果您在希望使用它们的文件中定义优先规则,它将不起作用,因为在您操作运算符表之后 Io 不会执行第二个解析阶段。
在构建此功能时,我们讨论过它,但选择保持简单,因为多个阶段需要额外的复杂性。
REPL 以它的方式工作,因为每次您按 Enter 键时,它就像一个新文件——它是一个新的字符串缓冲区,其中包含 VM 将在运行上下文中解释的代码,但单独解析它。
我希望这有帮助。就上下文而言,我多年来一直是 Io 的开发人员。
推荐阅读
- java - How to implement Math.round to achieve 3dp output?
- sql - SQL Server 查询与连接并将两行合并为单行记录
- ssl - 选择 ngrok 订阅以使用 Google Calendar API
- csv - 在 UNIX shell 中对数据进行排序和分离
- ubuntu-14.04 - 版本更新后 Ubuntu14.04 侧边栏启动器上缺少邮递员图标
- azure - 从基础继承的 Azure API 管理入站规则
- elasticsearch - 如何在 Elasticsearch 中的分组字段上应用聚合?
- ocr - 结构化数据从OCR数据中挖掘到特定字段的数据库中,无需使用模板
- python - 项目之间相似性计算的内存高效解决方案 - 购买数据
- mysql - mysql查询数据库中的复选框值