Dart 将可调用对象转换为函数,同时维护它';s哈希码

Dart 将可调用对象转换为函数,同时维护它';s哈希码,dart,Dart,不,您无法控制函数的哈希代码 转换为Function会创建一个新对象,而这是一个无法控制的hashCode函数对象 您可能要做的一件事是使用该函数的哈希代码作为对象的哈希。由于同一函数从同一对象的实例方法分离相等,因此它们也具有相同的哈希代码,因此: 类CallableObject{ CallableObject调用(){ 归还这个; } int get hashCode=>this.call.hashCode; } 然后,通过删除call创建的函数的hashCode将等于原始可调用对象的ha

不,您无法控制函数的哈希代码

转换为
Function
会创建一个新对象,而这是一个无法控制的
hashCode
函数对象

您可能要做的一件事是使用该函数的哈希代码作为对象的哈希。由于同一函数从同一对象的实例方法分离相等,因此它们也具有相同的哈希代码,因此:

类CallableObject{
CallableObject调用(){
归还这个;
}
int get hashCode=>this.call.hashCode;
}
然后,通过删除
call
创建的函数的
hashCode
将等于原始可调用对象的
hashCode

这只是修复了散列码,而散列码很少是真正的问题。 它不能解决平等问题,而且不能在两个方向上都解决。 你可以加上

bool操作符==(对象其他)=>
另一个是CallableObject
? 超级==其他
:other是函数&&this.call==other;

但是它对另一个方向没有帮助。

除非它是一个
函数,否则不能将其转换为
函数。您需要继承
函数
才能将其转换为函数。你能分享一下确切的要求吗?我想把它传递给一个接受
函数
作为参数的函数。如果你的类实现了
调用()
,你可以把它作为
函数
使用,而不需要强制转换。我需要把它作为参数传递给另一个函数,在那里它将被调用。它也可以在颤振上工作,我有一些案例——刚刚实现了
call()
,并将Foo的实例作为arg传递,覆盖getter
hashCode
operator=
函数是一个好主意!谢谢你的帮助。
void main() {
  Iterable<CallableObject> a = [new CallableObject()];
  test(a); // gives warning
}

class CallableObject
{
  CallableObject call(){return this;}
}

void test(Iterable<Function> test){
  print(test);
}
Function converter(CallableObject _)=>_;