foreach 后面的name变量不要放到函数定义的局部变量里面
本帖最后由 黄翔 于 2024-6-26 21:39 编辑(foreach name list )
;;;下面这代码n都不互相影响.
(setq n "原始")
(foreach n '("a" "b")
(alert n)
(foreach n '("1" "2")
(alert n)
)
)
(alert n)
;;经验分享foreach后面的name变量已经是局部变量了,不要放到函数定义的局部里面.会引起其他的bug
错误示例:重新举个例子.原来的不好.
(defun 子函数( x / n)
(eval x)
(foreach n '("a" "b")
(princ n)
)
)
(foreach n'("a" "b")
(子函数 '(alert n));;;这里会报错,因为子函数定义时n为nil了
)
正确做法:
(defun 子函数( x );定义时不要把n局部变量定义
(eval x)
(foreach n '("a" "b")
(princ n)
)
)
(foreach n'("a" "b")
(子函数 '(alert n));正确执行.
)
黄翔 发表于 2024-6-26 17:20
重新组织了下.本来就是个简单问题.n变量因为常常用到.放到局部变量里面可能会影响下一个n
foreach后面的变量不要放到函数的局部变量里面,它的生存周期是在foreach期间。 本帖最后由 黄翔 于 2024-6-26 21:40 编辑
tryhi 发表于 2024-6-26 18:06
(子函数 n);;;这里会报错,因为子函数定义时n为nil了
不会报错啊,你怎么测试的
(defun 子函数( x / n )
(eval x)
(foreach n '("a""b")
(princ n)
)
)
(foreach n '("a" "b")
(子函数'(alert n));;这里就报错了.
) 要不再组织一下语言?那后面怎么调用呢? 重新组织了下.本来就是个简单问题.n变量因为常常用到.放到局部变量里面可能会影响下一个n (子函数 n);;;这里会报错,因为子函数定义时n为nil了
不会报错啊,你怎么测试的 楼主结论可能有误,对于foreach x, lambda(x y),vlide有时候认为是变量,有时不认为是变量,具体原因不详。但是写在局部变量里,什么也不影响, 没看懂,吓得我赶紧测试一下,结果却没有什么 不好意思.举例不当.再换个.是有影响的. 这个属于举例不当,变量乱用跟foreach没关系
页:
[1]
2