我尝试了 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不同的行为。
这是编译器错误还是有造成这种差异的原因?
我想构建一个哈希图,其中键是引用。我希望这些引用的相等意味着引用相等,即两个引用借用同一个对象。
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)
我注意到,如果我实现 …
我的代码如下:
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是零.哪里不对了 ?怎么做 ?谢谢 !
根据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
Dart 有两个:
==和identical()。通过语法的选择,想要==比 更频繁地使用 Dart 的运算符感觉很自然identical(),我喜欢这一点。事实上,惯用 Dart 的平等部分指出“在实践中,你很少需要使用” 。identical()
在最近对我关于自定义过滤器的一个问题的回答中,似乎Angular Dart倾向于使用 ,identical()而不是==尝试确定模型的更改是否已达到稳定状态。(我想,出于效率的原因,这对于大型模型来说是有意义的。)
这让我开始考虑int's 的身份,所以我写了一些identical()over ints 的测试。虽然我预计小ints可能会被“内嵌/缓存”(例如类似于JavaInteger.valueOf()所做的),但令我惊讶的是,我似乎无法生成两个int相等但不相同的 s。我得到类似的结果double。
int和double值是否被拘留/缓存?或者也许identical()是特别对待他们?来自 Java 背景,我曾经将 Dart 等同于:
==到 Java 的equal()方法和identical()到 Java 的相等性测试 …抱歉非常愚蠢的问题.我正在使用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中保存新实体.
我试图了解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) 我有一个大小为(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 …
你能描述两种字符串连接方式之间的区别:简单的__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我知道字符串实习:)
虽然我正在解决"破解编码面试"一书中的问题......我对此表示怀疑.问题是:
给定二维平面上的两个正方形,找到一条将这两个正方形切成两半的线.
解决方案:任何穿过矩形中心的线都必须将其切成两半.因此,如果你绘制一条连接两个正方形中心的线,它会将两个正方形切成两半.
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)