只是想知道,如果我可以为 ActionScript 3 中的函数提供默认参数,用户永远无法将其传递给函数。情况是这样的:
public function getAttr (obj:Object, key:String, def:* = DEFAULT_VALUE):* {
if (!obj.hasOwnProperty(key)) {
if (def === DEFAULT_VALUE) {
throw ReferenceError('Attribute not found: ' + key);
} else {
return def;
}
} else {
return obj[key];
}
}
我不能在这里使用任何 null、undefined、Number、Boolean 或 String 作为 DEFAULT_VALUE,因为从逻辑上讲,用户可以使用这些值中的任何一个。我需要一些真正独特的东西。例如,在 python 中,我可以这样做:
_DEFAULT_VALUE = object()
def get_attr(obj, key, d=_DEFAULT_VALUE):
if not hasattr(obj, key):
if d is DEFAULT_VALUE:
raise KeyError('Attribute not found: {}'.format(key))
else:
return d
else:
return obj[d]
但在 ActionScript 3 中,这种方法会产生错误:
Error code: 1047: Parameter initializer unknown or is not a compile-time constant.
也许这里有一些黑客行为?