问题标签 [method-modifier]

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 投票
2 回答
823 浏览

perl - 为什么带有方法修饰符的 Moose 角色应用程序在我的代码中不起作用?

我有一个角色和几个混合角色的类。Role 类加载所有实现类,以便任何导入 Blah 的东西都可以使用它们,而无需键入很多“使用”行。

一个典型的 Blah 子类:

由于每个子类 'foo' 方法都以相同的代码位开始,因此角色也通过方法修饰符实现这些。

问题是:Moose 没有将方法修饰符应用于任何 Blah::* 类。即使我删除了类的 make_immutable 调用,也会发生这种情况。我认为角色应用完全是在运行时完成的,所以即使在 Blah 之前加载了 Blah::* 类,仍然应该应用修饰符?

我正在寻找解决方法,或另一种做事方式。目前 Blah 本质上是一个抽象基类,除了方法修饰符,这就是为什么我一开始就使用角色 - 但也许类层次结构会更好?提前致谢。

0 投票
2 回答
196 浏览

perl - 在 around 方法修饰符周围传递变量

是否可以在多次调用around MethodModier之间传递变量?示例(这不起作用,但希望能传达我想要做的事情)

我最终希望将这些“周围”放置在可插入的特征中,在那里我真的不知道事先加载了哪些,但最终输出将被整齐地格式化。

我可能认为这完全错误,因此欢迎提出其他建议。

0 投票
3 回答
150 浏览

perl - 我可以订购作为特征的一部分加载的顺序方法修饰符吗?

这是对上一个问题的跟进。如果我有多个带有around修饰符的插件/特征,是否可以确保特定的执行顺序(看看我如何不确定哪个会实际加载)?还是我真的只能在我编写的代码和文档中控制它?

示例:我有 3 个角色,每个角色都有一个around,每个角色都可以作为一个Trait加载,但如果加载超过 1 个,则必须按特定顺序加载它们才能正常工作。例如,按该顺序加载 Trait ABC 可以正常工作,但像 Trait BAC 一样加载它会导致行为不稳定。

有没有办法可以防止用户(程序员)以错误的顺序加载它们。

0 投票
1 回答
969 浏览

perl - 在 Perl/Moose 中,如何将修饰符应用于所有子类中的方法?

我有一个打算被子类化的 Moose 类,每个子类都必须实现一个“执行”方法。但是,我想将应用方法修饰符应用于我的类中的执行方法,以便它适用于所有子类中的执行方法。但是当方法被覆盖时,方法修饰符不会被保留。有什么方法可以确保我的类的所有子类都将我的方法修饰符应用于它们的执行方法?

示例:在超类中,我有这个:

然后,在它的一个子类中:

当调用execute方法时,它没有说任何关于“before”修饰符的内容。

0 投票
2 回答
1753 浏览

perl - Moose around 方法修饰符、setter 和构造函数(新):拦截对属性的所有更新

更新

我在原始问题中发布的代码说明了方法修饰符起作用或不起作用的方式。它不一定能说明我给出的问题描述。这段代码应该是。它可以工作,但在我用来编写跟踪所有更新并根据提供给 setter 的值对它们进行操作的要求编写代码的触发器中包含一个 hack。

仍然不确定使用什么 Moose 设施来完成这项工作。丰富的功能和设施并不总是让事情变得更容易。至少当您尝试不重新发明任何轮子并重用可以重用的东西时,至少不会。

原始问题

似乎around方法修饰符没有作为构建对象的一部分被调用(调用时new)。这里的测试用例:

让我解释一下我想要实现的目标。有一个类具有quantityprice(以及更多状态)。当数量进入时(通过new或设置器,我不在乎),我想确保它以整数形式结束(因此是约束)。如果它不是整数,我想用 just 替换它1并对对象进行一些其他更新,比如保存原始数量并将价格乘以原始数量。对于构造函数和设置器。

我该怎么办?提供一个完成这项工作的子程序并从around BUILDARGS和调用它around quantity

0 投票
2 回答
200 浏览

perl - Moose Perl:“修改所有子类中的多个方法”

我有一个 Moose BaseDBModel,它有不同的子类映射到我在数据库中的表。子类中的所有方法都像“get_xxx”或“update_xxx”,指的是不同的数据库操作。

现在我想为所有这些方法实现一个缓存系统,所以我的想法是“在”所有名为“get_xxx”的方法之前,我将在我的 memcache 池中搜索方法的名称作为键值。如果我找到了值,那么我将直接返回该值而不是方法。

理想情况下,我的代码是这样的

基础数据库模型

子类示例 1

现在我的问题是,当我的程序运行时,它会反复修改方法,例如:

  1. 重启阿帕奇

  2. 访问将调用 get_character_by_id 的页面,因此我可以看到一条警告消息

代码:

警告:

但是如果我刷新页面,我会看到 2 条警告消息

警告:

我正在使用带有 apache 的 mod_perl 2.0,每次我刷新页面时,我的 get_character_by_id 方法都会被修改,这是我不想要的

0 投票
2 回答
277 浏览

perl - 基类中的 Moose 方法修饰符不会被调用

可以将它们添加到子类中或将它们混合在角色中,这很酷。我的问题是,当子类重新定义方法本身(而不是修饰符)时,基类中的方法修饰符似乎被停用。也许我理解方法修饰符是错误的。例子:

我希望最后一个输出1$foo. 我究竟做错了什么?

0 投票
1 回答
169 浏览

perl - Moose 和 Roles 方法修改器

是否可以在 Role 中使用 after 修饰符来获取通过构建器方法填充到消费类中的必需属性?

消费类:

0 投票
4 回答
551 浏览

javascript - 有没有办法在函数中注入 try catch?

也许你们中的一些人了解 AOP,在某些语言中使用 AOP 可以让您能够在方法执行之后、之前或期间注入代码等。

我想要的是在 Javascript 中应用相同的内容,我目前正在开发一个具有 300 多个 ajax 调用的大型应用程序,每次我需要对它们的 catch 语句进行一些更改时,我都必须通过一个非常乏味的。

我想做的是:

是否可以?我知道有诸如 .call 之类的东西,或者每个函数中的 arguments 对象……它们看起来很像元函数 (AOP) 功能。

0 投票
3 回答
142 浏览

perl - 如何将方法修饰符应用于 AUTOLOAD 生成的方法?

我有一个非常有趣的困境。我正在开发 CVS 存储库的 Perl 脚本接口,并创建了 Perl 对象来表示ModulesPathsFiles. 由于ModulesPathsFiles都可以对它们发出 CVS 命令,因此我设置了AUTOLOAD例程以采用任何未识别的方法并在对象上发出它们,就好像它们是 CVS 命令一样。

所有这些 CVS 命令都以完全相同的方式执行,但其中一些需要对输出进行特殊处理才能获得我想要的结果。


例如,我想从 diff 命令获取输出并在返回之前重新格式化它。

我正在使用Moose,因此通常可以按如下方式完成此特殊处理:

问题是……我从来没有明确地创建过这个diff方法,因为它是由 Perl 生成的,AUTOLOAD而且 Perl 不会让我为它创建一个方法修饰符,因为它在技术上不存在!

有没有办法让它按我想要的方式工作?