当我尝试在 Dyalog APL 中分配名称时,我收到以下错误消息之一:
SYNTAX ERROR: Can't change nameclass on assignment
SYNTAX ERROR: Invalid modified assignment, or an attempt was made to change nameclass on assignment
“在分配时更改名称类”到底是什么意思,为什么不允许,我该如何解决这个问题?
当我尝试在 Dyalog APL 中分配名称时,我收到以下错误消息之一:
SYNTAX ERROR: Can't change nameclass on assignment
SYNTAX ERROR: Invalid modified assignment, or an attempt was made to change nameclass on assignment
“在分配时更改名称类”到底是什么意思,为什么不允许,我该如何解决这个问题?
APL 区分句法角色,每个角色由一个数字标识。该⎕NC
函数接受一个或多个名称,并返回它们的Name Class,例如 2 代表变量,3 代表函数,4 代表运算符,9 代表 ref。
根据作业文件:
重新分配
如果分配不会更改其名称类,或者将其从 2 更改为 9,反之亦然,则可以为已存在的名称分配新值。允许重新分配表如下:
参考 多变的 功能 操作员 参考 是的 是的 多变的 是的 是的 功能 是的 是的 操作员 是的 是的
当执行扩充赋值或使用赋值的值时(赋值箭头右侧的任何内容都作为结果返回),必须禁止某些重新赋值以消除歧义。例如:
Plus←+
a←100
a Plus←10
a
110
Double←{2×⍵}
Double b←10
20
如果没有这个限制,就不可能将这些情况与并行分配区分开来:
c d←10
c
10
d
10
在生产代码中为完全不同的东西重用名称可能是个坏主意,建议采用严格的命名约定(例如mine)。但是,在交互式会话 (REPL) 中进行试验时,只需删除现有名称的定义,即可将其用于所有用途。(⎕EX
删除)系统函数和)ERASE
系统命令都这样做:
a←10
a←+
SYNTAX ERROR: Can't change nameclass on assignment
a←+
∧
⎕EX'a'
a←+
a←10
SYNTAX ERROR: Invalid modified assignment, or an attempt was made to change nameclass on assignment
a←10
∧
)erase a
a←10