问题标签 [mop]

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.

0 投票
1 回答
295 浏览

common-lisp - 有没有办法从所有继承树中收集槽定义读取器?

泛型函数slot-definition-readers获取一个必须是 a 的参数direct-slot-definition。如果一个对象是从另一个类继承的类的实例,我如何才能获得该对象所有有效插槽的读者?我是否必须手动遍历树并调用每个超类中的slot-definition-readers结果class-direct-slots,收集结果,还是有另一种我不知道的方法?

0 投票
0 回答
99 浏览

security - 在调用脚本之前扫描 Groovy CallSiteArray

所以,我正在用 groovy 实现一个应用程序脚本接口,它们是一些相当严格的安全要求。

在编译时,我们将 SecureASTCustomizer 与一长串白名单和黑名单以及表达式检查器一起使用,以确保首先没有我们不想编译的内容。

但是,编译后的脚本存储在理论上可以修改的持久存储中。

所以我们想在执行之前检查编译好的脚本。现在我们使用 MetaClassCreationHandle 的实例来处理它,它返回一个自定义的 MetaClassImpl,它检查每个通过 invokeMethod 的传递。

不过,这会导致一些性能开销。

当脚本被实例化时,它会将 "Script".$callSiteArray 设置为 invokestatic "Script".$getCallSiteArray() 的结果。

有没有办法我可以自己调用该方法,或者使构造的调用站点数组对我可用,以便我可以戳穿它并进行相同类型的检查?还是在 groovy CallSites 中没有足够的信息?

Groovy 版本(不幸的是)固定在 2.1.6

0 投票
1 回答
400 浏览

methods - Common Lisp:从泛型函数中提取方法

有没有办法从 Common Lisp 中的泛型函数中提取方法列表?
例如:

更具体地说,我的目标是 ECL,所以如果这可以通过 C API 完成 - 没关系。
我需要这个来做下一个技巧:

0 投票
1 回答
121 浏览

raku - 你如何显示一个值的类型层次结构?

在 Perl5 和 Moose 中,线性 isa线性化 isa有助于理解类层次结构。

方法WHAT显示了值的具体类型:

我如何显示类似的东西

… 可能为每个消费角色添加更多台词?


编辑:具有两个角色的示例

0 投票
1 回答
82 浏览

common-lisp - MOP:访问任何插槽定义?(mito's col-type)

我定义了一个使用 Mito ORM 的类,插槽定义了一个:col-type

如何获得:col-type定义?由于这是我的类定义中的一个插槽,是否没有通用的方法来访问它,比如slot-definition :col-type ...

clos-mop 文档中,我只找到了如何访问

isbn 插槽显示如下:

谢谢。

0 投票
2 回答
246 浏览

raku - 如何创建一个不从任何其他类继承的类?

如果你创建一个类:

该类将继承其所有方法Any,然后Mu

我想创建一个不从任何其他类继承的类:它应该包含一个FALLBACK方法,该方法应该捕获对该对象实例的所有方法调用。

我查看了MetaModel代码,但似乎没有一种简单的方法可以实现这一目标。欢迎所有建议!

更新:我决定按照Jonathan Worthington 的描述截取任何方法调用方式。这导致了 CPAN 上的两个新 Perl 6 模块:InterceptAllMethodsObject::Trampoline

0 投票
1 回答
216 浏览

raku - 编写属性特征

我即将为新项目选择使用哪种语言:Perl5 或 Perl6。到目前为止 6 胜,只是缺少Moo的懒惰属性。我在模块中找到的两个实现缺少关键功能。因此,我尝试编写自己的实现。

角色与阶级

我遇到的第一个问题是.package角色中声明的属性的内容。考虑以下内容:

脚本的输出如下:

从输出中可以清楚地看出,将角色应用于元类始终适用于类并且仅适用于$*PACKAGE.HOW角色。使用 of$*PACKAGE而不是.package可以被认为是一种解决方案,但不是我真正想要使用的解决方案。(虽然,如果没有更好的方法......

存取器

我也想为私有属性提供惰性功能。是的,这self!bar仅适用于语法,但这是我愿意做出的牺牲。问题是到目前为止我发现的所有定制访问器的例子都使用Attribute.set_value()了太低级的方法。我想要这样的东西:

但是由于范围 ( ) $!bar1,符号无法编译。MooishRole是否有我遗漏的技巧可以引用私有属性self

棘手的一个

也许可以使属性成为Proxy容器?这将大大简化惰性实现的整体逻辑。

0 投票
1 回答
238 浏览

groovy - Groovy 中 propertyMissing 方法的静态版本是什么?

好的-尝试查看/阅读,但不确定我是否对此有答案。

我有一个实用程序类,它在内部包装了一个静态 ConcurrentLinkedQueue。

实用程序类本身添加了一些静态方法 - 我不希望调用 new 来创建实用程序的实例。

我想拦截 getProperty 调用实用程序类 - 并在类定义中内部实现这些

我可以通过在实用程序类元类中添加以下内容来实现这一点,然后再使用它

但是我想做的是在类定义本身中声明拦截。我在类定义中尝试过这个 - 但它似乎从未被调用

我也试过

static def getProperty (String prop) { println "accessed $prop"}

但这也不叫。

所以除了在我使用之前在我的代码/脚本中添加元类之外,如何在想要捕获属性访问的实用程序类中声明

我目前的实际课程看起来像这样

我很欣赏为静态实用程序类而不是实例级属性拦截执行此操作的秘诀,并在类声明中执行此操作 - 而不是在我进行调用之前添加到 metaClass。

只是为了让您可以看到实际的类和调用的脚本 - 我在下面附上了这些

我调用类的脚本看起来像这样

像这样的错误

0 投票
0 回答
642 浏览

gradle - project.getProperty() 如何在 Gradle 中工作?

Gradle API 没有这个方法,但是没有编译错误,它确实在运行时获取了属性。 https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html

我尝试使用调试器来发现幕后发生的事情,调用实际上落在了PogoGetPropertySite#getProperty.

到底发生了什么?

0 投票
1 回答
142 浏览

raku - 找出容器是类还是对象

我很好奇语法是类还是单例,所以我创建了这个小程序来找出:

这使用了多次调度来找出它,结果证明它Mini实际上是一个类。一般来说,会有更短的方法来找出这个吗?还是一种不需要知道包可能是实例的实际类的方法?