【问题标题】:Dart: Generic constraint that requires implementation of operator []Dart:需要实现运算符 [] 的通用约束
【发布时间】:2020-11-02 16:46:57
【问题描述】:

在 Dart 中是否可以有一个泛型约束,需要泛型类型来实现特定的运算符函数?

我想要一个通用函数,它接受任何实现operator [] 的类型。

例如

void foo<T extends operator[]>(T arg) {
  var v = arg['abc']
}

【问题讨论】:

    标签: generics dart operator-overloading


    【解决方案1】:

    没有。

    [] 操作符只是一个和其他方法一样的方法,除了花哨的名称。 将类型参数约束为具有特定方法的唯一方法是要求它实现具有该方法的接口,然后它仅在参数类型确实实现了该接口时才有效。

    您要求的是对类型的 structural 要求,而 Dart 类型系统主要是 nominal (类型由其名称定义,而不是由其成员,所以如果它没有按名称实现第一个类型,那么具有相同成员的东西仍然是不同的类型)。

    【讨论】:

    • 知道了。我希望运算符函数有某种隐式接口
    • 再想一想,也许 Map 和 List 可以实现名为 Indexable 的东西?正如 int 和 double 有 Comparable
    • 他们可以,但我们实际上并不想要。列表是一种具有连续整数键的映射,但它不是一回事。只有在对 same 操作进行抽象时,才应该存在一个公共超类型,而不仅仅是碰巧具有相同方法名称的事物。我认为我们会在 Indexable 之前执行 Lengthable
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多