Vin*_*inn 3 variables sbcl common-lisp
大多数时候,当我读取 CSV 数据时,我使用局部变量:
(defun do-something ()
...
(let ((thing (read-csv #P"~/Desktop/file.csv")))
.... do stuff with thing))
Run Code Online (Sandbox Code Playgroud)
这有效。然而,我的一些功能变得相当庞大和混乱。所以我尝试将读取数据的函数放在一个特殊变量中:
(defparameter *file* (read-csv #P"~/Desktop/file.csv"))
Run Code Online (Sandbox Code Playgroud)
但是当我使用该*file*
变量时,它不会使用新的 file.csv 进行更新。
有没有办法强制刷新或者也许是实时提取 CSV 数据的更好方法?
作为变量,*file*
从函数的结果初始化read-csv
。所以除非你setf
*file*
再次退出read-csv
它不会更新。
如果路径没有改变,您可以包装read-csv
到另一个函数中,例如:
(defun retrieve-csv-data ()
(read-csv #P"~/Desktop/file.csv"))
Run Code Online (Sandbox Code Playgroud)
并在需要 csv 数据的地方使用它。