黄翔 发表于 2024-6-26 16:46:28

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));正确执行.
)




highflybird 发表于 2024-6-26 18:05:55

黄翔 发表于 2024-6-26 17:20
重新组织了下.本来就是个简单问题.n变量因为常常用到.放到局部变量里面可能会影响下一个n

foreach后面的变量不要放到函数的局部变量里面,它的生存周期是在foreach期间。

黄翔 发表于 2024-6-26 21:37:07

本帖最后由 黄翔 于 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));;这里就报错了.
)

你有种再说一遍 发表于 2024-6-26 17:07:27

要不再组织一下语言?那后面怎么调用呢?

黄翔 发表于 2024-6-26 17:20:31

重新组织了下.本来就是个简单问题.n变量因为常常用到.放到局部变量里面可能会影响下一个n

tryhi 发表于 2024-6-26 18:06:08

(子函数 n);;;这里会报错,因为子函数定义时n为nil了

不会报错啊,你怎么测试的

自贡黄明儒 发表于 2024-6-26 19:40:55

楼主结论可能有误,对于foreach x, lambda(x y),vlide有时候认为是变量,有时不认为是变量,具体原因不详。但是写在局部变量里,什么也不影响,

小菜123 发表于 2024-6-26 20:05:05

没看懂,吓得我赶紧测试一下,结果却没有什么

黄翔 发表于 2024-6-26 21:14:02

不好意思.举例不当.再换个.是有影响的.

小菜123 发表于 2024-6-26 21:44:42

这个属于举例不当,变量乱用跟foreach没关系
页: [1] 2
查看完整版本: foreach 后面的name变量不要放到函数定义的局部变量里面