Встроенное переопределение вложенного массива

#arrays #multidimensional-array #vbscript

#массивы #многомерный массив #vbscript

Вопрос:

Я хочу ReDim вложенный массив (НЕ 2d-массив, см. Пример).
Я запускаю его с помощью файла VBS в Windows 10.

 '1 standard redim
myArr = Array()
Redim myArr(11)
msgBox(UBound(myArr)) 'show 11

'2 nested this way works
myArr(0) = Array("a", "b", "c")
msgBox(UBound(myArr(0))) 'show 2

'3 ERROR, NOT corresponding type
' myArr(1)(4) 

myArr(2) = Array()
msgBox(UBound(myArr(2))) 'show -1

'4  compiling error
reDim myArr(2)(3)
  

У меня есть решение, которое не является встроенным, но использует вспомогательную функцию:

 res = reDimmer(myArr(2), 4)
msgBox(UBound(myArr(2))) 'show 4 

function reDimmer(arr, num)
    reDim arr(num)
end function
  

Я не могу понять, допускаю ли я синтаксическую ошибку или есть ограничение в VBScript.

Ответ №1:

ReDim может использоваться только для переменной. Вы могли бы сделать следующее:

 Dim temp
temp = myArr(2)
ReDim temp(3)
myArr(2) = temp
  

(Но — я не уверен, почему вы хотели бы встроить это, а не просто использовать reDimmer .)

Комментарии:

1. Я бы предпочел сделать это встроенным, потому что это позволяет избежать строк кода, которые делают файл менее читаемым. Встроенный синтаксис также более гибкий, я должен выполнять две разные функции для сохраняемой версии.