【问题标题】:Iolang code works differently between in file and in relpIolang 代码在文件和 relp 中的工作方式不同
【发布时间】:2021-07-15 15:23:36
【问题描述】:

这是我的代码:

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 工作异常。

【问题讨论】:

    标签: iolanguage


    【解决方案1】:

    发生这种情况是因为运算符表代码像其他代码一样被解析一次。这意味着如果您想在您首先定义它的文件中使用它,您需要将您的操作员表代码放在一个单独的文件中。然后在与您的操作员表内容相同的文件中调用doFile("...")

    关于 Io 要了解的一点是,它的解析器除了“重写运算符”之外没有多个阶段——这意味着,如果在解析文件时运算符在表中,它将使用那些根据这些规则在需要的地方添加括号的优先级。但是,如果您在希望使用它们的文件中定义优先规则,则它将不起作用,因为在您操作运算符表后 Io 不会执行第二个解析阶段。

    在构建此功能时,我们讨论过它,但选择保持简单,因为多个阶段需要额外的复杂性。

    REPL 以它的方式工作,因为每次您按 Enter 键时,它就像一个新文件——它是一个新的字符串缓冲区,其中包含 VM 将在运行上下文中解释的代码,但单独解析它。

    我希望这会有所帮助。就上下文而言,我多年来一直是 Io 的开发人员。

    【讨论】:

    • 谢谢!有没有活跃的 iolang 社区?
    • 我不确定了。我知道 IRC 网络 freenode 上有一个名为 #io 的频道,在我使用该语言的整个过程中都相当活跃,但不确定什么是活跃的。
    • 好的。我还有一个问题:我怎样才能把它写在文件中。我应该将运算符的声明写在一个文件中,然后将其“导入”到另一个文件中吗?如果是这样,如何在 iolang 中“导入”?
    • 正如我所提到的,你只需要一个像 main.io 这样的文件,其中包含你的操作符表声明,最后,一个 doFile("blah.io") 假设你的代码文件在 blah.io在同一目录中。
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 2020-12-06
    • 2023-01-31
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多