使用从字符串读取时如何处理文件结尾错误?

问题描述

我正在尝试使用功能read-from-string,但是我不能用它来得起。

如果我正确理解文档,如果第二个参数不为true,则提供的字符串中不平衡的表达式不应导致错误。但是,如果尝试一下,我会得到:

>(从字符串“(1 2” t'EOF)读取

类型的条件:END-OF-FILE意外的文件结尾 # ..

可用重新启动:

  1. (重新开始)返回顶级REPL。

在SI:BYTECODES处损坏。 [评估:(读字符串“(1 2” ...)] 在:#。

>> 1

1

>>(从字符串“(1 2” nil'EOF)读取

调试器收到以下类型的错误:END-OF-FILE文件意外结束于 #的字符串输入流。刷新错误

无论我发送什么,我总是会出错。

我正在使用ECL 15.3.7

解决方法

eof-error-peof-value可选参数控制着在找到任何东西之前碰到字符串末尾的结果。所以:

> (read-from-string "")

Error: ...

同时

> (read-from-string "" nil 'foo)
foo
0

如果字符串的结尾部分出现在不完整的对象中,则总是会提示错误。规格很明确,尽管它离条目很远:

如果提供的子字符串的末尾出现在可以读取对象之前,则如果eof-error-p为true,则将指示错误。如果子字符串的末尾出现在不完整的对象中间,则表示发生错误。