gpt4 book ai didi

haxe - 在 Haxe 中使用函数作为映射键

转载 作者:行者123 更新时间:2023-12-05 01:24:10 28 4
gpt4 key购买 nike

我想像这样在 Map 中使用函数作为键:

var timers : Map<Void->Void, snow.api.Timer>;

但是 Haxe 不会编译:

Abstract Map has no @:to function that accepts IMap<Void -> Void, snow.api.Timer>

有办法吗?

最佳答案

编写自定义实现很容易:

import haxe.Constraints;

class FunctionMap<K:Function,V> implements IMap<K,V> {
private var _keys : Array<K>;
private var _values : Array<V>;

public function new () {
_keys = [];
_values = [];
}

public function get(k:K):Null<V> {
var keyIndex = index(k);
if (keyIndex < 0) {
return null;
} else {
return _values[keyIndex];
}
}

public function set(k:K, v:V):Void {
var keyIndex = index(k);
if (keyIndex < 0) {
_keys.push(k);
_values.push(v);
} else {
_values[keyIndex] = v;
}
}

public function exists(k:K):Bool {
return index(k) >= 0;
}

public function remove(k:K):Bool {
var keyIndex = index(k);
if (keyIndex < 0) {
return false;
} else {
_keys.splice(keyIndex, 1);
_values.splice(keyIndex, 1);
return true;
}
}

public function keys():Iterator<K> {
return _keys.iterator();
}

public function iterator():Iterator<V> {
return _values
.iterator();
}

public function toString():String {
var s = new StringBuf();
s.add("{");
for( i in 0..._keys.length ) {
s.add('<function>');
s.add(" => ");
s.add(Std.string(_values[i]));
if( i < _keys.length - 1 )
s.add(", ");
}
s.add("}");
return s.toString();
}


private function index(key:K) : Int {
for (i in 0..._keys.length) {
if (Reflect.compareMethods(key, _keys[i])) {
return i;
}
}
return -1;
}}

http://try.haxe.org/#DdF31

关于haxe - 在 Haxe 中使用函数作为映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36225649/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com