Что нового

Присвоить значение динамически созданному массиву

nowost

Знающий
Сообщения
178
Репутация
17
Приветствую всех и прошу помочь.
Пример

Код:
#Include <array.au3>

Dim $c[3]=['A','B','C']

Assign($c[0],StringSplit( 'SomeData','',2))
_ArrayDisplay(Eval($c[0]))

MsgBox(0,'',Eval($c[0])[1])


Каким образом я могу присвоить значение массиву Eval($c[0])[1] ?
все присвоения или переписывают этот массив обнуляя данные или не приводят к результату.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
#Include <array.au3>

Dim $c[3]

$c[0]=StringSplit( 'SomeData','',2)
_ArrayDisplay($c[0])
$tmp = $c[0]
$tmp[1] = 1
$c[0] = $tmp
_ArrayDisplay($c[0])
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
OffTopic:
У меня ваш скрипт работает, даже не смотря на то, что первым аргументов передается не имя переменной. Похоже очередная недокументированная возможность.
f879196171.png

Используйте следующий трюк:
Код:
#Include <Array.au3>

Global $c[3] = ['A','B','C']
; ---
$c[0] = StringSplit( 'SomeData','',2)
_ArrayDisplay($c[0])

_Assign($c[0], 1, 5)
MsgBox(0, '', ($c[0])[1])

Func _Assign( ByRef $Var, $Idx, $Value )
	$Var[$Idx] = $Value
EndFunc
 
Автор
N

nowost

Знающий
Сообщения
178
Репутация
17
Да, скрипт работает. Я ищу возможность присвоить значение
что-то вроде
Код:
Eval($c[0])[1]='data'
или
Assign(Eval($c[0])[1], 'Data',2)



Добавлено:
Сообщение автоматически объединено:

сейчас попробую с Byref
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Да, сказываются промахи в реализации массивов.
Чего только стоит этот изврат с $c[0])[1] или ($c[0])[1])[1] - в одних скобках запутаться можно,
или что бы поменять значение нужно писать функцию или три действия:
$a = $c[0]
$a[0] = 'B'
$c[0] = $a
и такой вариант $c[0])[1] = 'B', не работает, но тут либо баг, либо "фича"
Выкинули бы девелоперы все наработки по массивам и переделали. Очень уж криво сделано..
 
Автор
N

nowost

Знающий
Сообщения
178
Репутация
17
Друзья, спасибо за помощь и науку. вариант firex изумительно работает, я выкинул все Assign'ы И Eval'ы, использую например так
Код:
MouseClick("left", ($с[15])[0], ($с[15])[1])

:-[



Добавлено:
Сообщение автоматически объединено:

OffTopic:
хотел зеленых пальцев отсыпать но "Извините, но нельзя изменить карму в течении 24 часов"
 
Верх