功能在多个调度系统中是否可变?

Aiv*_*var 0 common-lisp multiple-dispatch multimethod dylan julia

我是否正确理解在(大多数?某些?)多种调度语言中,每个方法都会在程序执行的某个时间点添加到函数.

我可以得出结论,多个调度作为一个特征强制函数是可变的吗?

是否存在多种调度语言,其中所有方法一起附加到(通用)函数(在加载时?),因此不可能在不同的时间点看到不同状态的函数?

Rai*_*wig 5

在程序执行的某个时间点.

在Common Lisp中,方法在执行方法定义时被添加/替换 - 对于编译系统,这通常是在编译代码的加载时 - 在程序执行期间不一定.

请记住,Common Lisp有一个对象系统(CLOS,Common Lisp Object System),它由其行为定义.它与语言语言扩展略有不同.

Common Lisp允许运行时修改对象系统.例如,还添加/删除/替换方法.

Common Lisp还可以多个适用的方法组合成一个有效的方法,然后执行该方法.典型示例:所有适用的:before方法和最具体的适用主要方法将合并为一种有效的方法.

在一些实现中存在CLOS的扩展,其将通用功能密封以防止改变.

对于对象系统概念的更长时间的处理,请参阅Richard P. Gabriel 编写的语言革命的结构.