【发布时间】:2020-11-02 16:46:57
【问题描述】:
在 Dart 中是否可以有一个泛型约束,需要泛型类型来实现特定的运算符函数?
我想要一个通用函数,它接受任何实现operator [] 的类型。
例如
void foo<T extends operator[]>(T arg) {
var v = arg['abc']
}
【问题讨论】:
标签: generics dart operator-overloading
在 Dart 中是否可以有一个泛型约束,需要泛型类型来实现特定的运算符函数?
我想要一个通用函数,它接受任何实现operator [] 的类型。
例如
void foo<T extends operator[]>(T arg) {
var v = arg['abc']
}
【问题讨论】:
标签: generics dart operator-overloading
没有。
[] 操作符只是一个和其他方法一样的方法,除了花哨的名称。
将类型参数约束为具有特定方法的唯一方法是要求它实现具有该方法的接口,然后它仅在参数类型确实实现了该接口时才有效。
您要求的是对类型的 structural 要求,而 Dart 类型系统主要是 nominal (类型由其名称定义,而不是由其成员,所以如果它没有按名称实现第一个类型,那么具有相同成员的东西仍然是不同的类型)。
【讨论】:
Indexable 的东西?正如 int 和 double 有 Comparable。
Indexable 之前执行 Lengthable。