首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setf函数与函数的区别

setf函数与函数的区别
EN

Stack Overflow用户
提问于 2018-01-31 11:51:33
回答 1查看 302关注 0票数 3

以下解( setf函数和函数)之间有什么区别?它们中的一种是更好的,还是只有两种方法可以得到相同的结果?

代码语言:javascript
复制
(defparameter *some-array* (make-array 10))

(defun (setf arr-index) (new-value index-string)
  (setf (aref *some-array* (parse-integer index-string)) new-value))

(defun arr-index-1 (index-string new-value )
  (setf (aref *some-array* (parse-integer index-string)) new-value)) 

CL-USER> *some-array*
#(0 0 0 0 0 0 0 0 0 0)
CL-USER> (setf (arr-index "2") 7)
7
CL-USER> (arr-index-1 "3" 5)
5
CL-USER> *some-array*
#(0 0 7 5 0 0 0 0 0 0)

谢谢你的回答。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 12:23:38

setf函数作为一个地方工作(又名。广义参考)。这意味着它可以与修改宏(如INCFROTATEF )一起使用。但是,您也必须编写相应的getter函数才能工作。

代码语言:javascript
复制
(defparameter *some-array* (make-array 10))

(defun arr-index (index-string)
  (aref *some-array* (parse-integer index-string)))

(defun (setf arr-index) (new-value index-string)
  (setf (aref *some-array* (parse-integer index-string)) new-value))

CL-USER> (setf (arr-index "3") 10)
10
CL-USER> (incf (arr-index "3"))
11
CL-USER> (incf (arr-index "3"))
12
CL-USER> (rotatef (arr-index "3")
                  (arr-index "6"))
NIL
CL-USER> (incf (arr-index "3") 100)
100
CL-USER> *some-array*
#(0 0 0 100 0 0 12 0 0 0)

setf函数通常是首选的,除非您,出于某种原因,作出风格选择,不使用setf或修改宏。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48541489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档