问题标签 [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.
mongodb - Cryptic Moo (Perl) 错误“尝试祝福到...的引用”
可能是一个很长的镜头,但我想知道是否有人以前见过这样的错误,因为我无法在生产环境之外重现它。基本上情况如下:
- 我有一个名为
My::Budget::Module
(为简单起见重命名)的模块,它负责更新应用程序中给定对象的“预算” My::Budget::Module
使用我构建的一个对象Moo
,My::Bulk::Update::Module
它执行以下操作:- 构建需要更新的数据库行数组
- 构建一个 MySQL 更新查询字符串/语句,它将一次更新所有行
- 实际上一次更新所有行
- 然后
My::Bulk::Update::Module
将执行更新并将已更新的行标记为“陈旧”,以便它们不会被缓存
在添加要更新的行之后但在实际应用更新的代码返回之前,错误似乎总是发生在某处。
如果您查看我在下面包含的堆栈跟踪,您会看到错误采用以下形式
Attempt to bless into a reference at...
并且发生这种情况的点是在 from 的构造函数中Moo/Object.pm
(Version 2.003002
请Moo
参见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::Collection
,MongoDB::Collection
只是“碰巧”成为这个特定示例中堆栈跟踪中包含的模块。这并不总是MongoDB::Collection
- 我也见过MongoDB::Timestamp
,,,MongoDB::Cursor
等Search::Elasticsearch::Serializer::JSON
Search::Elasticsearch::Logger::LogAny
代码有时apply_bulk_update
一被调用就死掉,有时在调用时死掉,有时_generate_query
在查询在最后一行执行之后......
perl - 在同一脚本中声明之前无法正确使用 Moo 类
请看下面的脚本。第一次调用do_stuff(...)
,虽然它没有错误,但打印names: $VAR1 = undef;
.
第二次调用do_stuff(...)
, 按我预期的方式工作并打印names: $VAR1 = 'Second Name';
我有一些问题:
- 第一次调用do_stuff时使用什么包Foo?
- 编译器不应该抛出错误而不是使用看起来不正确的类吗?
编码:
perl - 为 Moo 只读属性设置写入器名称是否使其可读写?
我正在研究 Moo 并遇到了这个基本问题。如果我为只读属性设置访问器或写入器名称,则该属性将变为可写。访问者或编写者是否暗示该属性是可写的,即使它被设置为只读(is => 'ro')?
这是类代码:
对象代码:
结果:
当我使用访问器时,也会发生同样的行为。(is => 'ro') 仅在我使用自动生成的访问器名称时才有效,在本例中为“姓氏”。
这是预期的行为还是错误?
非常感谢。
minimize - 多目标优化示例 Pyomo
Pyomo中多目标优化的任何例子?
我正在尝试最小化 4 个目标(非线性),我想使用 pyomo 和 ipopt。也可以访问 Gurobi。
我想看一个非常简单的例子,我们尝试为决策变量列表(不仅仅是一个维度,可能是一个向量)优化两个或多个目标(一个最小化和一个最大化)。
我拥有的 Pyomo 书(https://link.springer.com/content/pdf/10.1007%2F978-3-319-58821-6.pdf)没有提供任何线索。
perl - 使用已发布的 Moo API 在 Moo 中动态修改方法
我试图坚持已发布的 API 来动态修改 中的方法Moo
,但还没有提出通用的解决方案。
首先,一些代码:
角色应用程序将说明一种方法的失败。
我尝试了两种方法。
第一个使用Class::Method::Modifiers:
并且工作正常:
Moo
的内部子程序的代码_install_modifier
非常相似,但也执行额外Moo
的特定操作,因此这种方法并不完全等效。
我尝试的下一个方法是直接使用before
可用的修饰符 to $c
,从而获得额外的Moo
特殊酱汁:
但...
似乎为原始类生成了修饰符,并且在应用角色C1
时没有更新。R1
以下令人震惊的黑客“修复”了:
这导致:
Moo
那么,有没有一种方法可以仅使用已发布的API来实现我的目标?
谢谢!
perl - 如何在我的 perl Moo 类中将对象推送到 ArrayOf[] 成员时检查对象是否有效?
我创建了一个 Moo 类,其中包含一个对象数组,该数组使用Types::Standard对照一个类型进行检查,并且我想验证我是否将正确的对象放入该数组中,而无需进行过多的硬编码。这是我现在拥有的示例:
在connect()中,我将对象添加到我的内部数组中,但如果我理解正确,则永远不会检查该对象,InstanceOf['MyClass']
因为我实际上并没有再次设置数组引用。
对每个新对象执行此验证的好方法是什么?在推送了一个新项目后,我曾短暂地考虑过这样做$self->connected( $self->connected )
,但这必须验证每个对象。
理想情况下,我什至不想确切地知道 ArrayRef 中的内容,只是需要检查它。我查看了Type::Tiny文档中的 _type_parameter_ ,但我不太清楚如何在我的代码中使用它。
perl - 带有 Moo 的只读突变体
我想要一个带有可修改字段的不可变对象,以便$foo->bar()
返回bar
of foo
,并$foo->bar(42)
返回一个设置为 42的新对象,保持原样。bar
$foo
当然,我可以用 Moo[se] 做到这一点:
但这有点乏味,那么是否有一个模块可以添加具有此类签名的访问器?
parsing - ANTLR Lexer 匹配错误的规则
我正在为一个旧的面向对象的聊天系统(MOO,以防任何读者熟悉它的语言)开发词法分析器和解析器。在该语言中,以下任何示例都是有效的浮点数:
2.3
3.
.2
3e+5
该语言还实现了一种索引语法,用于从字符串或列表中提取一个或多个字符(这是一组用大括号括起来的逗号分隔表达式)。问题出在语言支持索引括号内的范围运算符这一事实。例如:a = foo[1..3];
我知道 ANTLR 想首先匹配最长的匹配。不幸的是,这导致词法分析器将 '1..3' 视为两个浮点数(1. 和 .3),而不是它们之间带有范围运算符('..')的两个整数。有什么办法可以解决这个不使用词法分析器模式的问题吗?鉴于索引表达式中的值可以是任何有效的表达式,我将不得不复制很多令牌规则(基本上除了我理解的浮点数之外的所有)。现在,我是 ANTLR 的新手,所以我确定我遗漏了一些东西,非常感谢任何帮助。我将在下面提供我的词法分析器语法: