parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

G_Z 15.10 17:59 / 15.10 18:00

Кажется, что можно отказаться от new, а create позволить получать несколько аргументов.

При этом create всегда копирует содержимое всех аргументов в один массив:
$h1[$.1[a] $.2[b]]
$h2[$.1[c] $.2[d]]
$a[^array::create[$h1](3;4)[$h2]]
# ["a", "b", 3, 4, "c", "d"]
А если нужно получить именно вложенные массивы, то используем явный append:
$h1[$.1[a] $.2[b]]
$h2[$.1[c] $.2[d]]
$a[^array::create[]]
^a.append[$h1]
^a.append(3;4)
^a.append[$h2]
# [["a", "b"], 3, 4, ["c", "d"]]
Так можно будет использовать create как для копирования, так и для компактного создания массивов с нестроками:
$a[^array::create[a;b](3;4)[c;d]]
# ["a", "b", 3, 4, "c", "d"]
Возможно, вторая задача частая, в этом случае для неё можно завести отдельный конструктор a-la copy, который не будет сливать объекты, а помещать всё в надмассив.
$h1[$.1[a] $.2[b]]
$h2[$.1[c] $.2[d]]
$a[^array::copy[$h1](3;4)[$h2]]
# [["a", "b"], 3, 4, ["c", "d"]]