如何在Dyalog APL中修改函数外部定义的变量的值?
Dyalog APL修改外部变量的问题
你的函数无法修改外部marks_list的核心原因是:DFN(大括号定义的函数)中,直接对未声明的变量赋值时,会创建函数内部的局部变量,而非修改外部同名变量。
解决方案
方案1:使用:Global声明全局变量
在函数内通过:Global指定要修改的变量为全局,这样赋值操作就会作用到外部定义的变量上:
Accessibilityset←{ :Global marks_list (⍴marks_list)=0 : marks_list←⍺ marks_list }
方案2:改用传统函数(∇定义)
传统函数默认可以直接访问并修改全局变量,写法如下:
∇ r←Accessibilityset x (⍴marks_list)=0 : marks_list←x r←marks_list ∇
方案3:使用命名空间管理变量
如果不想直接使用全局变量,可以把marks_list放在命名空间中,通过命名空间引用修改:
# 先创建命名空间并初始化变量 ns←⎕NS⍬ ns.marks_list←⍬ # 修改后的函数 Accessibilityset←{ (⍴ns.marks_list)=0 : ns.marks_list←⍺ ns.marks_list }
注:DFN的设计更偏向无副作用的纯函数风格,若不是必须,建议尽量避免修改外部状态,改用函数返回值的方式传递数据。
内容的提问来源于stack exchange,提问作者Annamisaki
相关产品推荐
相关产品推荐

