首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏iOS 开发杂谈

    iOS 泛型 ObjectType 协变 __covariant 逆变 __contravariant

    __covariant(协变):用于泛型数据强转类型,可以向上强转,子类可以转成父类。 __contravariant(逆变):用于泛型数据强转类型,可以向下强转,父类可以转成子类。 例如: // __covariant 协变,子类转父类;泛型名字是ObjectType @interface Person<__covariant ObjectType> :NSObject // 语言 Java 指定这个人会的是Java Person<Java *> *p1 = [[Personalloc]init]; p1.language = java; } 添加了协变 // __covariant 子类转父类;泛型名字是ObjectType @interface Person<__covariant ObjectType> : NSObject // 语言 @property (nonatomic , strong) ObjectType language; @end // 子类转父类 - (void)covariant { iOS *ios = [[iOSalloc]init];

    3.7K40发布于 2018-09-30
  • 来自专栏iOS开发~

    iOS_泛型 Generics __covariant(协变) __contravariant(逆变)

    文章目录 1、泛型 `Generics` 2、`__kindof` 类型限制 3、自定义泛型 4、协变 和 逆变 4.1、`__covariant`协变 4.2、`__contravariant`逆变 string_collection; string_collection = collection; collection = mString_collection; 可以在占位泛型名称前加入修饰符__covariant end @implementation Person @end @interface Student : Person @end @implementation Student @end 4.1、__covariant (如:参数的类型) @interface Teacher<__covariant T: Person *> : NSObject @end @implementation Teacher @end . KeyType, __covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration

    1.5K10编辑于 2022-07-20
  • 来自专栏菩提树下的杨过

    c#4.0中的不变(invariant)、协变(covariant)、逆变(contravariant)小记

    (儿子是人类,父母当然也是人类,不可能是畜生,呵) 这时,我们称T为逆变(ContraVariant)量,而TResult则为协变(CoVariant)量。

    1.1K100发布于 2018-01-22
  • 来自专栏Rust语言学习交流

    [Rust笔记] 代码写明 Rust 中的泛型型变

    定义1 Covariance/Covariant译作协变: 如果C<Dog>是C<Animal>的子类型, 那么C<T>对T协变. a]; vec_short = vec_long; // 成功 } 编译失败 证明 Vec<&'short i32'> 不是 Vec<&'long i32> 的子类型 fn lifetime_covariant Type Variance in 'a Variance in T &'a T covariant covariant &'a mut T covariant invariant *const T covariant *mut T invariant [T] and [T; n] covariant fn() -> T covariant fn(T) -> () contravariant std::cell ::UnsafeCell<T> invariant std::marker::PhantomData<T> covariant dyn Trait<T> + 'a covariant invariant

    1.2K30编辑于 2022-11-28
  • 来自专栏C++ 动态新闻推送

    C++ 动态新闻推送 第5期

    Return Types and Covariant Smart Pointers 考虑这段代码 struct base { virtual base* get() = 0; }; struct : public covariant_ptr<Base, void>{ std::shared_ptr<Contained> value; }; // 给基类用的特化 template <typename Contained> struct covariant_ptr<Contained, void>{ }; struct base { virtual covariant_ptr<base> get () = 0; }; struct derived : base { covariant_ptr<derived, base> get() override{ return d; } covariant_ptr<derived, base> d; }; ACCU YT - Safer C++: MISRA-C++ : 202X Rules and Beyond - Peter Sommerlad

    1.2K30发布于 2021-08-31
  • 来自专栏C++核心准则原文翻译

    C++核心准则C.130:实现多态类的深拷贝时,虚clone函数要比拷贝构造函数/赋值运算符好

    return an owning pointer to the new object, and then in derived classes return the derived type (use a covariant 共变量返回类型(covariant return type):当基类的虚函数被派生类覆盖时,如果基类的虚函数返回某个类,而派生类返回该类的派生类,也看做是成功的覆盖。‍ However, because of language rules, the covariant return type cannot be a smart pointer: D::clone can't

    85700发布于 2020-03-25
  • 来自专栏从Android到Flutter

    Flutter框架分析(三)-- Widget,Element和RenderObject

    = null; void initState() { } void didUpdateWidget(covariant T oldWidget) { } void setState(VoidCallback 函数didUpdateWidget(covariant T oldWidget)在这个State被换了个新的Widget以后被调用到。 InheritedElement createElement() => InheritedElement(this); @protected bool updateShouldNotify(covariant RenderObject child, covariant dynamic slot); @protected void moveChildRenderObject(covariant RenderObject child, covariant dynamic slot); @protected void removeChildRenderObject(covariant RenderObject

    1.8K10发布于 2020-09-15
  • 来自专栏山河已无恙

    【JAVA冷知识】什么是逆变(contravariant)&协变(covariant)?数组支持协变&逆变吗?泛型呢?

    写在前面 ---- 和小伙伴分享一些java小知识点,主要围绕下面几点: 什么是逆变(contravariant)&协变(covariant)? 数组支持协变&逆变吗? 泛型支持协变&逆变吗?

    98610编辑于 2023-03-02
  • 来自专栏程序那些事

    Scala教程之:深入理解协变和逆变

    | } <console>:37: error: contravariant type R occurs in covariant position in type (v1: T1, v2: T2)R ^ <console>:37: error: covariant type T1 occurs in contravariant position in type T1 of value v1 def ^ <console>:37: error: covariant type T2 occurs in contravariant position in type T2 of value v2 def scala> class ContainerPlus[+A](var value: A) <console>:34: error: covariant type A occurs in contravariant ^ scala> class ContainerMinus[-A](var value: A) <console>:34: error: contravariant type A occurs in covariant

    1.1K30发布于 2020-07-08
  • 来自专栏Flutter

    Flutter 吃豆人加载动画效果

    radius * 2), angle / 2, 2 * pi - angle, true, _paint); } @override bool shouldRepaint(covariant canvas.drawCircle(Offset(_x, size.height / 2), radius, _paint); } } } @override bool shouldRepaint(covariant radius * 2), angle / 2, 2 * pi - angle, true, _paint); } @override bool shouldRepaint(covariant canvas.drawCircle(Offset(_x, size.height / 2), radius, _paint); } } } @override bool shouldRepaint(covariant

    1.2K20发布于 2021-09-03
  • 来自专栏用户9199536的专栏

    C++|对象模型|“虚构造函数“

    Uses the default constructor }; class Circle : public Shape { public: Circle* clone() const; // Covariant Return Types; see below Circle* create() const; // Covariant Return Types; see below // ... };

    53420发布于 2021-11-22
  • Python Generator:一个被低估的性能利器

    它使用了三个泛型参数:from typing import Generator, Iteratorfrom typing import TypeVar, GenericT_co = TypeVar('T_co', covariant # 生成器产出的类型T_contra = TypeVar('T_contra', contravariant=True) # send 方法接收的类型V_co = TypeVar('V_co', covariant 这个类型定义展现了 Python 类型系统中一些概念:T_co 是协变的(covariant),表示生成器产出的类型可以是基类T_contra 是逆变的(contravariant),表示接收的类型可以是子类 Animal: passclass Dog(Animal): passclass Chihuahua(Dog): pass# 定义类型变量T_co = TypeVar('T_co', covariant # 因为函数期望接收 Animal,那接收 Animal 的子类当然也可以简单理解:协变(covariant):允许使用更具体的类型如果方法返回 Dog,可以用在需要 Animal 的地方因为 Dog

    33610编辑于 2024-12-15
  • 来自专栏Android知识点总结

    Flutter & GLSL - 叁 | 变量传参

    canvas.drawRect(Rect.fromLTWH(0, 0, size.width, size.height), paint,); } @override bool shouldRepaint(covariant Rect.fromLTWH(0, 0, size.width, size.height), paint, ); } @override bool shouldRepaint(covariant Rect.fromLTWH(0, 0, size.width, size.height), paint, ); } @override bool shouldRepaint(covariant Rect.fromLTWH(0, 0, size.width, size.height), paint, ); } @override bool shouldRepaint(covariant

    85310编辑于 2024-02-17
  • 来自专栏算法之美

    C.130 C++核心准则(CppCoreGuidelines)

    an owning pointer to the new object, 、、 and then in derived classes return the derived type (use a covariant However, because of language rules, the covariant return type cannot be a smart pointer: 通常,建议使用智能指针来表示所有权

    1.7K10发布于 2021-03-04
  • 来自专栏APP自动化测试

    函数响应式编程及ReactiveObjC学习笔记 (四)

    UIImagePickerController+RACSignalSupport.h #import <UIKit/UIKit.h> @class RACDelegateProxy; @class RACSignal<__covariant :textFieldTerminal]; UITableViewCell+RACSignalSupport.h #import <UIKit/UIKit.h> @class RACSignal<__covariant cell; } UITableViewHeaderFooterView+RACSignalSupport.h #import <UIKit/UIKit.h> @class RACSignal<__covariant

    1.1K21发布于 2019-10-15
  • 来自专栏APP自动化测试

    函数响应式编程及ReactiveObjC学习笔记 (三)

    UITextView+RACSignalSupport.h开始看 #import <UIKit/UIKit.h> @class RACDelegateProxy; @class RACSignal<__covariant RACSignalSupport.h #import <UIKit/UIKit.h> @class RACChannelTerminal<ValueType>; @class RACSignal<__covariant UIActionSheet+RACSignalSupport.h #import <UIKit/UIKit.h> @class RACDelegateProxy; @class RACSignal<__covariant }]; [alert show]; UIControl+RACSignalSupport.h #import <UIKit/UIKit.h> @class RACSignal<__covariant

    1.3K20发布于 2019-10-15
  • 来自专栏灯塔大数据

    双周动态|中国电信入选国有重点企业管理标杆创建行动;字节&牛津提出视觉解析器;DeepMind公开35万种蛋白质预测结构

    02 投融资动态 创业两年获1.47亿美元融资,人工智能Covariant为机器人注入灵魂 2021年7月28日,机器人专用通用人工智能初创公司Covariant完成了8000万美元的C轮融资,该公司仅仅创立两年 Covariant 表示,这笔资金将用于研发和发展其团队,目前该团队约有80人。 Covariant正在开发一种名为Covariant Brain的机器人专用通用人工智能,旨在使用这一种人工智能系统,就可以部署所有种类的机器人。 2020年时,Covariant Brain就已经部署在了需要“取和放”的各种行业中,包括时尚、健康和美容、工业供应、制药、杂货、包裹和日化。

    57620发布于 2021-08-06
  • 来自专栏Android知识点总结

    【Flutter 绘制探索】进度与裁剪 - CustomClipper 的使用

    false); return Path.combine(PathOperation.xor, path, zone); } @override bool shouldReclip(covariant progress) ); Path path = Path()..addOval(rect); return path; } @override bool shouldReclip(covariant ); Path path = Path()..addRect(rect); return path; } @override bool shouldReclip(covariant

    1.3K30编辑于 2022-10-05
  • 来自专栏Android知识点总结

    【Flutter绘制集录】第二画: 流光

    100, height: 100)); canvas.drawPath(circlePath, paint); } @override bool shouldRepaint(covariant = Color(0xff00abf2); canvas.drawPath(result, paint); //绘制 } @override bool shouldRepaint(covariant breatheTween.evaluate(animation)); canvas.drawPath(circlePath, paint); } @override bool shouldRepaint(covariant null; canvas.drawPath(result, paint); canvas.restore(); } @override bool shouldRepaint(covariant

    1.6K21编辑于 2022-03-08
  • 来自专栏ATYUN订阅号

    三星推出Q Fund投资计划,为AI初创公司提供资金

    Q Fund最初的投资包括去年7月筹集5000万美元的机器人创业公司Vicarious AI以及Covariant AI。 Covariant前身为Embodied Intelligence,教授机器人学习如何完成任务而无需人工控制,由加州大学伯克利分校教授Pieter Abbeel和其他OpenAI研究人员共同创立。

    39330发布于 2018-07-27
领券