String Clisp中的只读字符串
我注意到String Clisp中的只读字符串,string,readonly,clisp,String,Readonly,Clisp,我注意到Clisp中此代码的输出存在一些不一致之处: (defvar str "Another") (setf (char str 3) #\!) 当我从repl运行它时,我得到了期望的结果: [1]> (defvar str "Another") STR [2]> (setf (char str 3) #\!) #\! [3]> str "Ano!her" [4]> 但是,当我从脚本运行它时,会收到关于修改只读字符串的警告: *** - Attempt to mod
Clisp
中此代码的输出存在一些不一致之处:
(defvar str "Another")
(setf (char str 3) #\!)
当我从repl运行它时,我得到了期望的结果:
[1]> (defvar str "Another")
STR
[2]> (setf (char str 3) #\!)
#\!
[3]> str
"Ano!her"
[4]>
但是,当我从脚本运行它时,会收到关于修改只读字符串的警告:
*** - Attempt to modify a read-only string: "Another"
我在运行此代码时遇到了此错误:
(print (do ((str "foobar")
(i 0 (+ i 1)))
((= i (length str)) str)
(setf (char str i) #\!)))
当块结束时绑定将消失时,将字符串设为只读(我假设这与不可变
)有什么意义?
为什么两个输出之间存在差异?
最后,有什么方法可以关闭它吗?我不觉得这个警告特别有用。解决方案
首先,你看到的是一个,而不是一个
其次,您不能关闭它,但可以通过不可变字符串来避免它:
(print (do ((str (copy-seq "foobar"))
(i 0 (+ i 1)))
((= i (length str)) str)
(setf (char str i) #\!)))
动机
这是一个网络上经常讨论的话题
基本原因是:
- 多线程环境中的安全性和
- 更好的编译器
(print (do ((str (copy-seq "foobar"))
(i 0 (+ i 1)))
((= i (length str)) str)
(setf (char str i) #\!)))
动机
这是一个网络上经常讨论的话题
基本原因是:
- 多线程环境中的安全性和
- 更好的编译器
(print (do ((str (copy-seq "foobar"))
(i 0 (+ i 1)))
((= i (length str)) str)
(setf (char str i) #\!)))
动机
这是一个网络上经常讨论的话题
基本原因是:
- 多线程环境中的安全性和
- 更好的编译器
(print (do ((str (copy-seq "foobar"))
(i 0 (+ i 1)))
((= i (length str)) str)
(setf (char str i) #\!)))
动机
这是一个网络上经常讨论的话题
基本原因是:
- 多线程环境中的安全性和
- 更好的编译器
Soo,该检查未在repl?Soo中执行,该检查未在repl?Soo中执行,该检查未在repl?Soo中执行,该检查未在repl?Soo中执行?