docs: explain match assertions and annotation type distinctions
This commit is contained in:
@@ -106,6 +106,7 @@ fn source_parameters_are_contravariant_and_returns_covariant_at_class_creation()
|
||||
"Number",
|
||||
Value::Nil,
|
||||
);
|
||||
// 子方法缩窄参数可接受范围会破坏替换关系,必须在建类时报告覆盖违规。
|
||||
assert!(matches!(
|
||||
class(&mut vm, "Narrow", base, narrow),
|
||||
Err(VmError::OverrideViolation {
|
||||
@@ -133,6 +134,7 @@ fn source_parameters_are_contravariant_and_returns_covariant_at_class_creation()
|
||||
"Object",
|
||||
Value::Nil,
|
||||
);
|
||||
// 子方法放宽返回类型会破坏父方法承诺,必须在建类时拒绝。
|
||||
assert!(matches!(
|
||||
class(&mut vm, "Broad", numeric_type, broad),
|
||||
Err(VmError::OverrideViolation {
|
||||
@@ -305,6 +307,7 @@ fn global_rebinding_is_rechecked_before_the_source_body_and_recovers() {
|
||||
vm.attach_type(receiver, child).unwrap();
|
||||
vm.dict_set(globals, Value::Text("Actual".into()), Value::Object(other))
|
||||
.unwrap();
|
||||
// Actual 的全局类型绑定变化后,调用前重新检查覆盖关系,失败时不能运行方法体。
|
||||
assert!(matches!(
|
||||
vm.call(child_fn, &[Value::Object(receiver)]),
|
||||
Err(VmError::OverrideViolation { .. })
|
||||
@@ -404,6 +407,7 @@ fn native_overrides_preserve_union_inputs_and_do_not_expand_effects() {
|
||||
vec![],
|
||||
))
|
||||
.unwrap();
|
||||
// 只读父方法不能被已知有写效果的子方法替换,更新必须在提交前失败。
|
||||
assert!(matches!(
|
||||
vm.define_method(child, "check", effect_fn),
|
||||
Err(VmError::OverrideViolation {
|
||||
@@ -423,6 +427,7 @@ fn native_overrides_preserve_union_inputs_and_do_not_expand_effects() {
|
||||
vec![],
|
||||
))
|
||||
.unwrap();
|
||||
// 子方法仅接受 Number 会丢失父联合参数的 String 候选,不能缩窄父方法可接受的输入。
|
||||
assert!(matches!(
|
||||
vm.define_method(child, "check", narrow_fn),
|
||||
Err(VmError::OverrideViolation {
|
||||
@@ -498,6 +503,7 @@ fn unknown_forward_names_defer_until_call_without_entering_the_body() {
|
||||
.unwrap();
|
||||
vm.dict_set(globals, Value::Text("Later".into()), Value::Object(later))
|
||||
.unwrap();
|
||||
// Later 从未知名解析成不兼容名义类型后,错误应转为覆盖违规且仍在方法体前发生。
|
||||
assert!(matches!(
|
||||
vm.call(
|
||||
child_fn,
|
||||
|
||||
Reference in New Issue
Block a user