问题标签 [moo]

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 回答
561 浏览

mongodb - Cryptic Moo (Perl) 错误“尝试祝福到...的引用”

可能是一个很长的镜头,但我想知道是否有人以前见过这样的错误,因为我无法在生产环境之外重现它。基本上情况如下:

  1. 我有一个名为My::Budget::Module(为简单起见重命名)的模块,它负责更新应用程序中给定对象的“预算”
  2. My::Budget::Module使用我构建的一个对象MooMy::Bulk::Update::Module它执行以下操作:
    • 构建需要更新的数据库行数组
    • 构建一个 MySQL 更新查询字符串/语句,它将一次更新所有行
    • 实际上一次更新所有行
  3. 然后My::Bulk::Update::Module将执行更新并将已更新的行标记为“陈旧”,以便它们不会被缓存

在添加要更新的行之后但在实际应用更新的代码返回之前,错误似乎总是发生在某处。

如果您查看我在下面包含的堆栈跟踪,您会看到错误采用以下形式

Attempt to bless into a reference at...

并且发生这种情况的点是在 from 的构造函数中Moo/Object.pmVersion 2.003002Moo参见cpan此处

向后移动堆栈跟踪会导致MongoDB::Collection&这就是事情开始变得非常奇怪的地方。

MongoDB::Collection也是一个模块,但此时出现的模块会有所不同,除了它始终是一个对象cpan外,我在这里看不到模式。Moo此外,我不确定为什么要实例化这个模块,因为MongoDB::Collection::new在提到的那一行没有调用。

此外,从堆栈跟踪来看,它看起来像MongoDB::Collection并被Moo::Object实例化,第一个参数是My::Bulk::Update::Module=HASH(0xf784b50). 鉴于应用程序逻辑,我认为不MongoDB::Collection应该在这里实例化也不应该My::Bulk::Update::Module传递给它MongoDB::Collection

除了它是一个Moo对象之外,My::Bulk::Update::Module它不扩展任何其他模块,并且被设计为一个独立的“实用程序”模块。它仅在整个应用程序中的一处使用。

有没有人见过类似的东西?

编辑:添加更多代码 -apply_bulk_update根本没有做太多。这里没有调用MongoDB::CollectionMongoDB::Collection只是“碰巧”成为这个特定示例中堆栈跟踪中包含的模块。这并不总是MongoDB::Collection- 我也见过MongoDB::Timestamp,,,MongoDB::CursorSearch::Elasticsearch::Serializer::JSONSearch::Elasticsearch::Logger::LogAny

代码有时apply_bulk_update一被调用就死掉,有时在调用时死掉,有时_generate_query在查询在最后一行执行之后......

0 投票
0 回答
24 浏览

perl - 在同一脚本中声明之前无法正确使用 Moo 类

请看下面的脚本。第一次调用do_stuff(...),虽然它没有错误,但打印names: $VAR1 = undef;.

第二次调用do_stuff(...), 按我预期的方式工作并打印names: $VAR1 = 'Second Name';

我有一些问题:

  1. 第一次调用do_stuff时使用什么包Foo?
  2. 编译器不应该抛出错误而不是使用看起来不正确的类吗?

编码:

0 投票
2 回答
224 浏览

perl - 为 Moo 只读属性设置写入器名称是否使其可读写?

我正在研究 Moo 并遇到了这个基本问题。如果我为只读属性设置访问器或写入器名称,则该属性将变为可写。访问者或编写者是否暗示该属性是可写的,即使它被设置为只读(is => 'ro')?

这是类代码:

对象代码:

结果:

当我使用访问器时,也会发生同样的行为。(is => 'ro') 仅在我使用自动生成的访问器名称时才有效,在本例中为“姓氏”。

这是预期的行为还是错误?

非常感谢。

0 投票
1 回答
362 浏览

perl - 我们如何在 Moo 或 Moose 中动态创建缺失的属性?

我们有一个示例代码,如下所示。是否可以捕获包 FooBar 中调用的所有缺失属性并动态创建它?这有点像 PHP 的__call

测试.pl


0 投票
3 回答
6972 浏览

minimize - 多目标优化示例 Pyomo

Pyomo中多目标优化的任何例子?

我正在尝试最小化 4 个目标(非线性),我想使用 pyomo 和 ipopt。也可以访问 Gurobi。

我想看一个非常简单的例子,我们尝试为决策变量列表(不仅仅是一个维度,可能是一个向量)优化两个或多个目标(一个最小化和一个最大化)。

我拥有的 Pyomo 书(https://link.springer.com/content/pdf/10.1007%2F978-3-319-58821-6.pdf)没有提供任何线索。

0 投票
1 回答
121 浏览

perl - 使用已发布的 Moo API 在 Moo 中动态修改方法

我试图坚持已发布的 API 来动态修改 中的方法Moo,但还没有提出通用的解决方案。

首先,一些代码:

角色应用程序将说明一种方法的失败。

我尝试了两种方法。

第一个使用Class::Method::Modifiers

并且工作正常:

Moo的内部子程序的代码_install_modifier非常相似,但也执行额外Moo的特定操作,因此这种方法并不完全等效。

我尝试的下一个方法是直接使用before可用的修饰符 to $c,从而获得额外的Moo特殊酱汁:

但...

似乎为原始类生成了修饰符,并且在应用角色C1时没有更新。R1以下令人震惊的黑客“修复”了:

这导致:

Moo那么,有没有一种方法可以仅使用已发布的API来实现我的目标?

谢谢!

0 投票
3 回答
72 浏览

perl - 如何在我的 perl Moo 类中将对象推送到 ArrayOf[] 成员时检查对象是否有效?

我创建了一个 Moo 类,其中包含一个对象数组,该数组使用Types::Standard对照一个类型进行检查,并且我想验证我是否将正确的对象放入该数组中,而无需进行过多的硬编码。这是我现在拥有的示例:

connect()中,我将对象添加到我的内部数组中,但如果我理解正确,则永远不会检查该对象,InstanceOf['MyClass']因为我实际上并没有再次设置数组引用。

对每个新对象执行此验证的好方法是什么?在推送了一个新项目后,我曾短暂地考虑过这样做$self->connected( $self->connected ),但这必须验证每个对象。

理想情况下,我什至不想确切地知道 ArrayRef 中的内容,只是需要检查它。我查看了Type::Tiny文档中的 _type_parameter_ ,但我不太清楚如何在我的代码中使用它。

0 投票
0 回答
75 浏览

perl - 带有 Moo 的只读突变体

我想要一个带有可修改字段的不可变对象,以便$foo->bar()返回barof foo,并$foo->bar(42)返回一个设置为 42的对象,保持原样。bar$foo

当然,我可以用 Moo[se] 做到这一点:

但这有点乏味,那么是否有一个模块可以添加具有此类签名的访问器?

0 投票
1 回答
329 浏览

parsing - ANTLR Lexer 匹配错误的规则

我正在为一个旧的面向对象的聊天系统(MOO,以防任何读者熟悉它的语言)开发词法分析器和解析器。在该语言中,以下任何示例都是有效的浮点数:

2.3

3.

.2

3e+5

该语言还实现了一种索引语法,用于从字符串或列表中提取一个或多个字符(这是一组用大括号括起来的逗号分隔表达式)。问题出在语言支持索引括号内的范围运算符这一事实。例如:a = foo[1..3];

我知道 ANTLR 想首先匹配最长的匹配。不幸的是,这导致词法分析器将 '1..3' 视为两个浮点数(1. 和 .3),而不是它们之间带有范围运算符('..')的两个整数。有什么办法可以解决这个不使用词法分析器模式的问题吗?鉴于索引表达式中的值可以是任何有效的表达式,我将不得不复制很多令牌规则(基本上除了我理解的浮点数之外的所有)。现在,我是 ANTLR 的新手,所以我确定我遗漏了一些东西,非常感谢任何帮助。我将在下面提供我的词法分析器语法:

0 投票
1 回答
62 浏览

perl - 如何将取决于另一个属性的属性约束从触发器提升到类型细化?

这有效:

我希望能够以某种方式使约束成为类型的一部分。

我检查了wheresub只接收一个参数。