我想了解以下代码变体:
a = [1, 2, 3]
b = a
b.append(4)
b = ['a', 'b']
print(a, b)
Run Code Online (Sandbox Code Playgroud)
我的理解是变量a指的是一个对象,该对象包含[1,2,3]内存中某个位置的列表,b现在指的是所指的同一对象a,并且通过该链接,我们在技术上附加了一个 not b。
输出: [1, 2, 3, 4] ['a', 'b']
我稍微更新了代码:
a = [1, 2, 3]
b = ['a', 'b']
b = a
b.append(4)
print(a, b)
Run Code Online (Sandbox Code Playgroud)
我的理解: b 现在通过第三行引用两个对象,第一个列表 ['a','b']和第二个列表(a最初是指)。[1,2,3]b = a
输出: [1, 2, 3, 4] [1, 2, 3, 4]
最后的代码变体:
a = [1, 2, 3]
b = ['a', 'b'] …Run Code Online (Sandbox Code Playgroud) 在 Martin Fowler 的 UML Distilled 的“双向关联”部分,他说:
在编程语言中实现双向关联通常有点棘手,因为您必须确保两个属性保持同步。使用 C#,我使用以下代码来实现双向关联:
书中的代码
class Car...
public Person Owner {
get {return _owner;}
set {
if (_owner != null) _owner.friendCars().Remove(this);
_owner = value;
if (_owner != null) _owner.friendCars().Add(this);
}
}
private Person _owner;
...
class Person ...
public IList Cars {
get {return ArrayList.ReadOnly(_cars);}
}
public void AddCar(Car arg) {
arg.Owner = this;
}
private IList _cars = new ArrayList();
internal IList friendCars() {
//should only be used by Car.Owner
return _cars;
}
.... …Run Code Online (Sandbox Code Playgroud) 当我尝试在定义点初始化字符串文字数组时它工作正常:
char* arr[3] = { "ahmed" , "saeed" , "ahmed" };
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在定义点之后将这些值分配给它时,它会从第二个值开始给出错误:
char* arr[3] ;
arr[3] = { "ahmed" , "saeed" , "ahmed"};
Run Code Online (Sandbox Code Playgroud)
这里有什么不同,最近发生了什么?
错误:
Severity Code Description Project File Line Suppression State
Error (active) E0146 too many initializer values structs_consts
Severity Code Description Project File Line Suppression State
Error C2440 '=': cannot convert from 'initializer list' to 'char *' structs_consts
Run Code Online (Sandbox Code Playgroud)
谢谢.