以下代码:
#[derive(Copy)]
enum MyEnum {
Test
}
给我这个错误:
错误:未对类型core::clone::Clone
实施特性MyEnum
[E0277]
为什么会这样,我该如何解决?
答案 0 :(得分:16)
Copy
trait is a subtrait of Clone
,因此如果您实施Clone
,则始终需要实施Copy
:
#[derive(Copy, Clone)]
enum MyEnum {
Test
}
这是有道理的,因为Copy
和Clone
都是复制现有对象的方式,但具有不同的语义。 Copy
只需复制构成对象的位(如C中的memcpy
)即可复制对象。 Clone
可能更昂贵,可能涉及分配内存或复制系统资源。任何可以与Copy
重复的内容也可以与Clone
重复。
答案 1 :(得分:5)
这是因为特征-(void)loadimage{
NSString *workSpacePath=[[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"your image-name"];
UIImageView *myimage=[UIImageView alloc] initWithFrame:CGRectMake(0,0,20,20)];
myimage.image=[UIImage imageWithData:[NSData dataWithContentsOfFile:workSpacePath]];
[self.view addSubView:myimage];
[myimage release];
取决于特征Copy
。
编译器不会尝试为您推断和实现该特征。
所以你必须明确地实现克隆特征。
就像那样:
Clone