Я запустил Devel :: Leak
в моей программе, и я не понимаю вывод, который он мне дает.
Для начала я вижу это печать списка указателей. Могу ли я получить этот список в массиве? Затем я могу использовать FindRef, чтобы увидеть, откуда он исходит.
Например:
new 0xaebc28 : SV = PVGV(0x30e7e48) at 0xaebc28
REFCNT = 1
FLAGS = (GMG,SMG)
IV = 0
NV = 0
PV = 0
MAGIC = 0x2db7dc0
MG_VIRTUAL = &PL_vtbl_glob
MG_TYPE = PERL_MAGIC_glob(*)
MG_OBJ = 0xaebc28
NAME = "SUPER::"
NAMELEN = 7
GvSTASH = 0x76b228 "IO::File"
GP = 0x314b170
SV = 0x30283c8
REFCNT = 1
IO = 0x0
FORM = 0x0
AV = 0x0
HV = 0x301fdb8
CV = 0x0
CVGEN = 0x0
GPFLAGS = 0x0
LINE = 161
FILE = "/mypath/perl_install/perl/lib/5.8.9/x86_64-linux/IO/File.pm"
FLAGS = 0x0
EGV = 0xaebc28 "SUPER::"
или несколько небольших записей:
new 0x161c268 : SV = RV(0x3029b40) at 0x161c268
REFCNT = 1
FLAGS = (ROK)
RV = 0x161c218
Что мне делать с этим? Я получаю материал структуры Perl (magic, iv, pv, ..), нашел. Конструктор не может быть определен в код.
Итак, ActionScript-3 не может иметь несколько конструкторов?
Нет, у вас не может быть нескольких конструкторов и одной и той же функции с разными сигнатурами, но вы можете использовать аргументы по умолчанию:
public function Shard(x:Number=NaN, y:Number=NaN) {
//...
}
тогда вы можете вызвать new Shard()
или новый осколок(100)
или новый осколок(100, 200)
или вы также можете использовать переменные аргументы:
public function Shard(...args){
if (args.length==0) {
//...
} else {
//...
var firstArg:Object=args[0];
//...
}
}
Это даже шире. AS3 вообще не поддерживает перегрузку функции .
Вы можете моделировать появление нескольких конструкторов со значениями параметров по умолчанию и / или динамически отправлять параметры различным методам init
. В качестве альтернативы могут помочь фабрики настраиваемых объектов или статические методы создания.