问题标签 [invariants]
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.
eclipse-emf - 使用 Ecore 分类器的 OCL 约束 - 未知类型异常
我正在使用 OCLinEcore 编辑器开发一个在 OCL 中定义了一些不变量的 Ecore 模型。在我的模型中,一些元素引用了 EClassifier;在某些 OCL 约束中,我需要检查所引用的 EClassifier 是 EDataType 还是 EClass。在 OCLinEcore 中,这是一个类似于我的模型:
但是,当我尝试验证模型的动态实例时,会出现异常并显示以下消息:
在“耦合”上委派评估“兼容性”约束时发生异常:未知类型([ecore,EDataType])
当我在 OCL 交互式控制台中尝试表达式时,我得到了正确的结果。定义我的不变量时我做错了什么吗?如何编写使用 Ecore 类型的不变量?
c# - 不同泛型的数组
长话短说,我希望能够通过对所有使用的类型使用父类型,在数组中使用不同类型参数存储泛型。MSDN 提到这是不可能的,因为泛型是不变的类型,但有评论指出自 4.0 框架以来这发生了变化。
这是我想做的一个基本示例:
这将返回类似的错误:
有没有办法使用类型的父类将泛型存储在数组中,或者这根本不可能?我真的希望这是可能的,否则它会让我的程序成为一场噩梦......
编辑:更多的上下文!
我正在制作课程以在游戏中生成敌人。我称它们为模板(与实际的模板类无关,我完全可以称它们为蓝图或工厂)。一个敌人的构造函数接受一个模板,它用它来确定自己的值。当游戏加载时,模板用于生成所有敌人,使用它们的 Generate() 函数,该函数返回一个对应类型的数组,它们被分配生成。使用模板创建的所有对象都有一个以模板为唯一参数的构造函数。
这是 BasicZombie.cs 文件的摘要,其中包含实际的敌人类和模板。
加载游戏时,我想遍历数组中的所有模板以从中加载敌人。我知道我可以手动执行此操作,但每次创建新类型的敌人时,我都需要手动将其添加到代码中(因此可能会忘记不止一次)。
我的两个选择是:1-使用泛型,然后出现上述问题。2- 使用非泛型,并将类型存储在其中,这将锚定返回类型 Generate() 函数。这意味着 generate 函数将输出一个对象数组,该数组需要在模板每次生成敌人数组时转换为合适的类型。
我的脑海中有一个空间告诉我有一个优雅的解决方案来解决这一切,我希望它是正确的!
java - 如何使java列表协变
我有以下课程
对于测试,我有一个驱动程序类。
默认情况下,列表是不变类型的容器。例如,假设我们有List<Object> objectList
,ArrayList<String> stringList
我们不能将 stringList 替换为 objList。这将导致编译错误
我的尝试是像在 Driver 类中一样使列表协变。
根据<? extends Animal>
我们可以应用任何属于 Animal 子类型的对象,包括 Animal 类型。
但是我在指示的行中遇到了编译问题。有人可以从理论上解释我哪里出错了。
image-processing - 胡七不变矩在物体识别中的意义
我的问题是关于胡七不变矩的含义。
据我所知,有些时刻是有意义的;即零阶是指图像的区域。同样如http://mathworld.wolfram.com/topics/Moments.html中所述,可以从不同的时刻顺序中提取许多特征。但问题是胡矩提取了哪些特征?我知道他工作的重点是这些特征对于 RTS(旋转、平移和缩放)是不变的。但我的问题是这些特征描述了什么?这些特征与图像中的物体有什么关系?
谢谢你的帮助。
scala - 协变类型 T 出现在不变的位置
我正在 Scala 中迈出第一步,我想让以下代码工作:
编译器给出的错误是:covariant type T occurs in invariant position in type => Array[T] of value gene
我知道我可以做类似的事情:
但这并不能解决问题,因为我需要一个值:实际上我想说的是“我不在乎内部类型,我知道基因将具有返回其内容的基因字段”。(这里的 +T 是因为我想做类似的事情type Genome = Array[Gene[Any]]
,然后将其用作单个基因类的包装器,这样我就可以拥有异构数组类型)是否可以在 Scala 中做到这一点,或者我只是采取了错误的方法? 使用不同的结构会更好吗,比如 Scala 原生协变类?
提前致谢!
PS:我也尝试过使用类和抽象类而不是特征,但结果总是相同!
编辑:在 Didier Dupont 的善意建议下,我来到了这段代码:
所以我现在认为我可以放入和检索不同类型的数据,并将它们与所有类型检查的好东西一起使用!
c++ - 什么构成 C++11 中“移出”对象的有效状态?
我一直在努力思考 C++11 中的移动语义应该如何工作,并且在理解移动对象需要满足哪些条件时遇到了很多麻烦。在这里查看答案并不能真正解决我的问题,因为尽管移动语义的论点非常适合 pimpls,但看不到如何以合理的方式将其应用于 pimpl 对象。
我的问题的最简单说明涉及 pimpl 成语,如下所示:
现在,一旦我从Foo
. 我可以安全地销毁被移动的对象,我可以分配给它,这两者都是绝对关键的。但是,如果我尝试do_stuff
使用我的Foo
,它会爆炸。在我为我的定义添加移动语义之前Foo
,每个都Foo
满足它可以的不变量,现在do_stuff
情况不再如此。似乎也没有很多很好的选择,因为(例如)放置移动源Foo
将涉及新的动态分配,这部分违背了移动语义的目的。我可以检查是否impl_
进入do_stuff
并将其初始化为默认值FooImpl
如果是这样,但这会增加一个(通常是虚假的)检查,如果我有很多方法,那就意味着要记住对每个方法都进行检查。
我应该放弃能够do_stuff
是一个合理的不变量的想法吗?
c++ - 在嵌套循环/循环不变量中检查一次
在嵌套循环中每次迭代只做一次的最聪明的方法是什么?我无法提取不变部分,因为外循环非常复杂。这是我的 C++ 示例:
这个方法经常被调用,直到 tree.cycle 增加。oldCycle 是 foo 的私有成员变量
编译器会优化此代码还是每次迭代都会运行 if 检查?
编辑:这里像请求带有循环的代码:第一个循环在 mexFunction() 方法中,算法在 matlab 中启动并调用 mexFunction。
这是另一个循环:
c++ - 通过不影响不变量的集合的 NON-const 迭代器访问成员
假设我有这样的代码:
我如何向编译器保证编写 MoreFields 不会影响任何不变量或不会做任何事情来使集合中元素的顺序无效?
如果唯一的办法是使用另一个容器,例如向量,我如何在排序位置插入一个新值,同时检查一个是否已经存在?
java - 我正在使用 daikon Chicory 进行不变检测,但遇到 java.lang.VerifyError
我正在学习如何使用 daikon.Chicory 做一些不变的检测。但是在 java-examples 部分,我在这个命令之后遇到了这个错误
我在 Windows 7 上使用 cygwin shell。