问题描述
我正在尝试使用功能read-from-string,但是我不能用它来得起。
如果我正确理解文档,如果第二个参数不为true,则提供的字符串中不平衡的表达式不应导致错误。但是,如果尝试一下,我会得到:
>(从字符串“(1 2” t'EOF)读取
类型的条件:END-OF-FILE意外的文件结尾 # ..
可用重新启动:
- (重新开始)返回顶级REPL。
在SI:BYTECODES处损坏。 [评估:(读字符串“(1 2” ...)] 在:#。
>> 1
1
>>(从字符串“(1 2” nil'EOF)读取
无论我发送什么,我总是会出错。
我正在使用ECL 15.3.7
解决方法
eof-error-p
和eof-value
可选参数控制着在找到任何东西之前碰到字符串末尾的结果。所以:
> (read-from-string "")
Error: ...
同时
> (read-from-string "" nil 'foo)
foo
0
如果字符串的结尾部分出现在不完整的对象中,则总是会提示错误。规格很明确,尽管它离条目很远:
如果提供的子字符串的末尾出现在可以读取对象之前,则如果eof-error-p为true,则将指示错误。如果子字符串的末尾出现在不完整的对象中间,则表示发生错误。