很多人在Python开始时遇到意想不到的浅拷贝行为,我想确保我不会在MATLAB中犯这些错误(我的经验较少)。
我读了这篇关于object behaviors in MATLAB的文章,并且我阅读了与指针/句柄行为有关的this question。是否存在 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(this.requestCode == requestCode && resultCode == RESULT_OK){
Bitmap bitmap = (Bitmap)data.getExtras().get("data");
imageview.setImageBitmap(bitmap);
}
}
返回false的情况,但您仍会遇到isa(obj, 'handle')
的修改会导致修改另一个变量的情况(据我所知,函数调用修改的任何参数都应该触发一个copy on write and duplicate the variable in memory)?
这是对MATLAB中“浅拷贝”行为的完全理解吗?标准值对象复制行为是否还有其他注意事项?
答案 0 :(得分:3)
值类可以包含句柄类,如果修改它,您将更改句柄类的实例。例如(注意containers.Map
是一个内置类,它是一个句柄 - 没有什么特别之处,我只是为了方便而选择它:
>> a = containers.Map; a('hello') = 1;
>> b = struct('field1', 1, 'field2', a);
>> isa(b, 'handle')
ans =
logical
0
>> b.field2('hello') = 2;
>> a('hello')
ans =
2
所以b
是一个结构(具有值语义),但它的一个字段包含一个containers.Map
,它是一个句柄并具有引用语义。修改该字段后,您还需要更改a
,这是对基础containers.Map
的另一个引用。