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传递,覆盖getterhashCode
和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 _)=>_;