问题标签 [meta-object-protocol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
grammar - 命名语法规则的元对象规则是什么
如本期所示,某些标记名称与 Grammar 的类层次结构中的方法名称发生冲突(包括Match、Capture、Cool、Any和My .)。例如,`Mu.item
发出这样的错误:
item
也是Any
s 方法的一部分;我没有在其他类中找到任何其他名称通常失败的方法,但是没有定义任何子类(除了item
);大多数是多重或实际上定义为method
。
当像TWEAK
of之类的BUILD
子方法用于标记名称时也会发生这种情况,但这种情况下的错误是不同的:
但是,其他子方法FALLBACK
完全没有问题:
同样适用于 Grammar 类层次结构中的其他一些方法,例如,rand
或者一般来说,大多数方法都是这样定义的。
有问题的名称似乎有一个共同点,即它们被声明为sub
但并非总是如此:CREATE
最初导致整个问题的 . 被声明为method
. 因此,我完全不清楚要避免使用哪些名称,以及可以合法使用哪些名称。有人可以澄清吗?
reflection - 函数将函数转换为 CLOS 中的列表。可能吗?
是否可以将代码转换为 CLOS 中的列表?那是; 是否可以构建一个带有参数 f 的函数,它应该是一个函数或方法,并将其转换为一个列表?
目标是以与在编译期间使用设计模式访问器访问函数的抽象语法树的节点相同的方式访问列表元素。
raku - 如何创建一个不从任何其他类继承的类?
如果你创建一个类:
该类将继承其所有方法Any
,然后Mu
。
我想创建一个不从任何其他类继承的类:它应该包含一个FALLBACK
方法,该方法应该捕获对该对象实例的所有方法调用。
我查看了MetaModel
代码,但似乎没有一种简单的方法可以实现这一目标。欢迎所有建议!
更新:我决定按照Jonathan Worthington 的描述截取任何方法调用方式。这导致了 CPAN 上的两个新 Perl 6 模块:InterceptAllMethods和Object::Trampoline。
raku - 从类外部更改类变量
最后,当我设法理解如何解决这个问题,即如何更改内部动态变量的值时,代码继续前进,现在以这种方式声明:
这是一个在内部声明的类变量class Encoding::Builtin
。在世界上一切都有意义,因为操作系统不是在变量的生命周期内发生变化的东西。但是,我需要从其他操作系统测试此代码,因此我需要访问该类变量并为其分配一个True
值。我可以使用元对象协议来做到这一点吗?
class - 在 Common Lisp 中的类名上调用类分配的插槽
有没有办法在类的名称而不是实例上调用 :class 分配的插槽?就像是:(class-alloc-slot 'name-of-the-class)
object - 使用 EXPORTHOW 制作像“sub”一样的声明符
出色的 2011 年 Raku Advent of Raku 后元编程:什么、为什么以及如何提供了一些清晰的示例,说明如何使用EXPORTHOW
来创建像class
. 这是第一个:
有没有办法为声明者做类似的事情sub
(也就是说,允许用户提供签名和块,而不是允许用户提供属性和方法)?a 的元类Sub
是ClassHOW
,所以看起来类似的东西应该是可能的,但我没有看到这样做的方法。