标签: object-identity

has_unique_object_representations 和空子对象不一致

我尝试了 C++20 的[[no_unique_address]]属性,并在将其与类型特征一起使用时发现了一些有趣的行为has_unique_object_representations

#include <type_traits>

struct Empty {};

struct A : public Empty {
    int x;
};

struct B {
    [[no_unique_address]] Empty e;
    int x;
};

static_assert (sizeof(A) == sizeof(int));
static_assert (sizeof(B) == sizeof(int));

static_assert(std::has_unique_object_representations_v<A>);
static_assert(std::has_unique_object_representations_v<B>);
Run Code Online (Sandbox Code Playgroud)

只有最后一个断言对于 GCC(主干)和 Clang(主干)都失败。据我所知,这里没有理由A采取B不同的行为。

这是编译器错误还是有造成这种差异的原因?

c++ type-traits object-identity c++20

6
推荐指数
0
解决办法
232
查看次数

Rust 引用没有实现 Eq/Hash?如何使用它们作为哈希映射键?

我想构建一个哈希图,其中键是引用。我希望这些引用的相等意味着引用相等,即两个引用借用同一个对象。

use std::collections::hash_map::HashMap;

struct SomeKey();
struct SomeValue();

fn main() {
    let m = HashMap::<&SomeKey, SomeValue>::new();
    
    let t = SomeKey();
    m.get(&t);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这失败了,编译器告诉我&SomeKey没有实现Hash/ Eq

error[E0599]: the method `get` exists for struct `HashMap<&SomeKey, SomeValue>`, but its trait bounds were not satisfied
  --> src/main.rs:10:7
   |
10 |     m.get(&t);
   |       ^^^ method cannot be called on `HashMap<&SomeKey, SomeValue>` due to unsatisfied trait bounds
   |
   = note: the following trait bounds were not satisfied:
           `&SomeKey: Eq`
           `&SomeKey: Hash`
Run Code Online (Sandbox Code Playgroud)

(操场)

我注意到,如果我实现 …

object-identity rust

6
推荐指数
1
解决办法
1796
查看次数

如何从url获取objectID?

我的代码如下:

NSURL *urlID = [objID URIRepresentation];
    NSString *strID = [urlID absoluteString];
    NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:strID, @"objectID", nil];
    localNotification.userInfo = infoDict;
Run Code Online (Sandbox Code Playgroud)

那么我想得到这样的反对意见:

NSString *strID = [notification.userInfo objectForKey:@"objectID"];
NSURL *urlID = [[NSURL alloc] initWithString:strID];
NSManagedObjectID *objID = [[NSPersistentStoreCoordinator alloc] managedObjectIDForURIRepresentation:urlID];
Run Code Online (Sandbox Code Playgroud)

但是objID是零.哪里不对了 ?怎么做 ?谢谢 !

core-data object-identity ios

5
推荐指数
1
解决办法
3103
查看次数

DDD和MongoDB:让Mongo创建ObjectID是否可以?

根据DDD(蓝皮书,埃文斯),工厂有责任在有效状态下创建聚合根.这是否意味着它应该能够创建技术ID(mongoDB世界中的objectId)以及域ID?

一方面,这似乎是一个技术细节,让Mongo处理ID的创建似乎没问题.

另一方面,通过id(通过getById在DDD存储库中)进行查询会将技术ID公开给域,这反过来又会使工厂负责创建它.

也许我无法理解技术ID与DomainId的不同用例/重叠等,或者我可能过于热心,但无论如何我都很感激你的意见.

简而言之:在DDD中:工厂是否应该能够创建技术ID以及域ID?

可能的实现:Hi/Lo(如何设置MongoDB Norm中的hilo序列起始值?)

编辑:虽然hi/lo方式将Factory暴露给持久层,这只是存储库应该知道的东西.嗯

谢谢

domain-driven-design hilo factory-pattern mongodb object-identity

5
推荐指数
1
解决办法
1159
查看次数

Dart int 和 double 被实习?由相同的()特别对待?

Dart 有两个:

  • 一个相等运算符==
  • 一个名为 的顶级函数identical()

通过语法的选择,想要==比 更频繁地使用 Dart 的运算符感觉很自然identical(),我喜欢这一点。事实上,惯用 Dart 的平等部分指出“在实践中,你很少需要使用” 。identical()

在最近对我关于自定义过滤器的一个问题的回答中,似乎Angular Dart倾向于使用 ,identical()而不是==尝试确定模型的更改是否已达到稳定状态。(我想,出于效率的原因,这对于大型模型来说是有意义的。)

这让我开始考虑int's 的身份,所以我写了一些identical()over ints 的测试。虽然我预计小ints可能会被“内嵌/缓存”(例如类似于JavaInteger.valueOf()所做),但令我惊讶的是,我似乎无法生成两个int相等但不相同的 s。我得到类似的结果double

intdouble值是否被拘留/缓存?或者也许identical()是特别对待他们?来自 Java 背景,我曾经将 Dart 等同于:

  • ==到 Java 的equal()方法和
  • identical()到 Java 的相等性测试 …

identity equality object-identity dart

5
推荐指数
2
解决办法
202
查看次数

Morphia保存新实体而不是更新_id

抱歉非常愚蠢的问题.我正在使用Morphia 1.00.有一些实体:

@Entity("Vacancy")
public class Vacancy {

@Id
private ObjectId id;
@Version
long version;

private String title;
Run Code Online (Sandbox Code Playgroud)

和其他一些领域,二传手和吸气剂.试图保存相同的实例:

Vacancy vacancy1 = new Vacancy();
vacancy1.setTitle("Dumm");
Vacancy vacancy2 = new Vacancy();
vacancy2.setTitle("Dumm");

vacancyDao.getDatastore().save(vacancy1);
vacancyDao.getDatastore().save(vacancy2);
Run Code Online (Sandbox Code Playgroud)

据我所知,mongoDb必须执行upsert命令(意思是"如果存在则更新;如果缺少则插入(单个文档)").但是,mongo不是仅仅更新_id字段,而是在DB中保存新实体.

java mongodb object-identity morphia

4
推荐指数
1
解决办法
5431
查看次数

何时在OCaml中创建物理上不同的值?

我试图了解OCaml中物理相等运算符(Pervasives.(==)Pervasives.(!=))的含义.

语言手册说表达式""是"常量",而不是"表达式":

6.5常数

constant :: == ... string-literal

但是我找不到任何表明常量是单独/预先评估或合并的,并且REPL表明可变字符串值(谢天谢地)没有合并.

(* a *)  ""          == "";;             (* false *)
(* b *)  "foo"       == "foo";;          (* false *)
(* c *)  ""          == String.copy "";; (* false *)
(* d *)  ()          == ();;             (* true  *)
(* e *)  (42, -42)   == (42, -42);;      (* false *)
(* f *)  ("", 1)     == ("", 1);;        (* false *)
(* g *)  None        == None;; …
Run Code Online (Sandbox Code Playgroud)

ocaml referenceequals object-identity

4
推荐指数
1
解决办法
177
查看次数

创建HDF5数据集时出现“ ValueError:不是位置ID(无效的对象ID)”

我有一个大小为(3997,29)的numpy array(arr)。我正在使用此数组创建数据集。该数组同时具有整数和浮点变量。所以dtype是参考。但是,当我执行它时,出现以下错误。

“ ValueError:不是位置ID(无效的对象ID)”

with h5py.File("test1.h5", 'w') as f:
     grp = f.create_group('Nodes')

with h5py.File("test1.h5", 'r+') as f:
     grp = f.require_group('Nodes')

ref_dtype = h5py.special_dtype(ref=h5py.Reference)

arrshape = np.shape(arr)

dset = grp.create_dataset('Init' ,arrshape, dtype = ref_dtype , data= arr)
Run Code Online (Sandbox Code Playgroud)

错误发生在最后一行。以下是回溯消息
dset = f.create_dataset('Init',arrshape,dtype = ref_dtype,data = arr)

文件“ C:\ Users \ rupesh.n \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ h5py_hl \ group.py”,行108,位于create_dataset中dsid = dataset.make_new_dset(自身,形状,dtype,数据,** kwds)

在make_new_dset dset_id = h5d.create中的文件“ C:\ Users \ rupesh.n \ AppData \ Local …

python numpy object-identity

4
推荐指数
1
解决办法
1822
查看次数

Python中的字符串连接

你能描述两种字符串连接方式之间的区别:简单的__add__运算符和%s模式吗?我在这个问题上进行了一些调查,发现%s(没有使用括号的形式)更快一点.

还出现了另一个问题:为什么结果'hell%s' % 'o'指的是另一个记忆区域'hell%s' % ('o',)

有一些代码示例:

l = ['hello', 'hell' + 'o', 'hell%s' % 'o', 'hell%s' % ('o',)]
print [id(s) for s in l]
Run Code Online (Sandbox Code Playgroud)

结果:

[34375618400, 34375618400, 34375618400, 34375626256]
Run Code Online (Sandbox Code Playgroud)

PS我知道字符串实习:)

python compilation internals object-identity

3
推荐指数
1
解决办法
327
查看次数

我可以使用==运算符来比较Java中的Point对象吗?

虽然我正在解决"破解编码面试"一书中的问题......我对此表示怀疑.问题是:

给定二维平面上的两个正方形,找到一条将这两个正方形切成两半的线.

解决方案:任何穿过矩形中心的线都必须将其切成两半.因此,如果你绘制一条连接两个正方形中心的线,它会将两个正方形切成两半.

   public class Square {
       public double left;
       public double top;
       public double bottom;
       public double right;
       public Square(double left, double top, double size) {
              this.left = left;
              this.top = top;
              this.bottom = top + size;
              this.right = left + size;
       }

       public Point middle() {
              return new Point((this.left + this.right) / 2,
                                           (this.top + this.bottom) / 2);
       }

       public Line cut(Square other) {
              Point middle_s = this.middle();
              Point middle_t = other.middle();
              if (middle_s == middle_t) {
                     return …
Run Code Online (Sandbox Code Playgroud)

java object-comparison object-identity

3
推荐指数
1
解决办法
3257
查看次数