Что нового

Новый тип переменной Table в AutoIt

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
В последних бетах появился новый тип переменной Table. Хотя это официально еще не опубликованно, но уже можно этим пользоваться.
Тип этот, как я понял, очень похож на объект, которому можно задавать и получать свойства.
Вот пример:
Код:
Local $c[] ;Тип переменной Table
$c.data = 'Привет'
$c.data2 = 'Привет2'

ConsoleWrite($c.data & @LF)
ConsoleWrite($c.data2 & @LF)


В консоль будет выведено:
Код:
Привет
Привет2

Если это не будет вырезано, то очень круто!
Пока что, в версии 3.3.9.21 это работает!



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

Может кто сможет создать метод?


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

Продолжаем исследование этого типа :smile:
Оказывается цикл For подходит для перечисления.
Код:
Local $c[]
$c.data1='Мир'
$c.data2='Труд'
$c.data3='Май'

For $a In $c
	ConsoleWrite($a & @LF)
Next



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

With тоже работает:
Код:
Local $c[]
With $c
	.data_1 = 'Мир'
	.data_2 = 'Труд'
	.data_3 = 'Май'
EndWith
For $a In $c
	ConsoleWrite($a & @LF)
Next
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
А какие команды принимает такой объект(у вас только data)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
MnM [?]
А какие команды принимает такой объект(у вас только data)
Это не команды, это свойства. Они любые:
Код:
Local $c[]
With $c
	.month_01 = 'Январь'
	.month_02 = 'Февраль'
	.month_03 = 'Март'
	.month_04 = 'Апрель'
EndWith
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
а в чем заключается удобство использования таким объектом :-\
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
inververs
У меня тоже возникает мысль, что некоторые действия в Autoit эта вещь может сильно упростить.
Можно пример практического применения?
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Например, можно хранить разные данные в одной переменной, как в массиве, только обращаясь к ним по именам

Код:
Local $info[]
$info.un = @UserName
$info.cn = @ComputerName
ConsoleWrite('Ваше имя: '& $info.un & ' Ваш компьютер: ' & $info.cn & @LF)
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
inververs
Например, можно хранить разные данные в одной переменной, как в массиве, только обращаясь к ним по именам

Это, получается, возможный аналог коллекции или ассоциативного массива?
 

AZJIO

Меценат
Меценат
Сообщения
2,878
Репутация
1,194
Сейчас это можно сделать на объекте Scripting.Dictionary. Разница только в сложности записи.
Код:
Local $info = ObjCreate("Scripting.Dictionary") 
$info.CompareMode = 0
$info.Add('un', @UserName)
$info.Add('cn', @ComputerName)
ConsoleWrite('Ваше имя: '& $info.Item('un') & ' Ваш компьютер: ' & $info.Item('cn') & @LF)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
AZJIO,
Код:
$info.CompareMode = 0
Можно не указывать, это значение по умолчанию, если не указано другое (1 или 2).
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Тогда наверное Scripting.Dictonary пока что удобней т.к. это не работает
Код:
Global $c[]
$c.data1="Welcome"
$c.data2="To"
$c.data3="Hell"
$c.dat.lp="You"
MsgBox(0,'',$c.dat.lp)
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Если объявят официальную поддержку, тогда может многие вещи касаемые этого типа данных, прояснятся. А пока можно просто гадать, как с этим работать.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Пока не будет подробного описания всех свойств и методов этого объекта (переменной), я бы не стал его использовать.
 
Автор
inververs

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
MnM [?]
Да, так не работает. Что бы это использовать нужно добавлять много переменных. Например, описывая форму, хочу хранить дополнительный данные о каждом контроле.
Код:
Local $gui[]
Local $form_data[]
Local $label_data[]
$gui.form = $form_data
$gui.label = $label_data

$gui.form.hwnd = GUICreate("Form1", 188, 49, 192, 124)
$gui.form.state = @SW_SHOW

$gui.label.hwnd = GUICtrlCreateLabel('1',8,8,121,21)
$gui.label.text = 'Тест'

GUICtrlSetData($gui.label.hwnd,$gui.label.text)
GUISetState($gui.form.state)
Sleep(10000)


Но это не очень удобно, гораздо проще если бы сразу можно было создавать как то так:
Код:
Local $gui[]
$gui.form.hwnd = GUICreate("Form1", 188, 49, 192, 124)
$gui.form.state = @SW_SHOW





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

Или так:
Код:
Local $gui[]
Local $hwnd[]
Local $value[]
Local $state[]

$gui.hwnd = $hwnd
$gui.value = $value
$gui.state = $state

$gui.hwnd.form = GUICreate("Form1", 188, 49, 192, 124)
$gui.state.form = @SW_SHOW

$gui.hwnd.label_username = GUICtrlCreateLabel('1',8,8,121,21)
$gui.value.label_username = 'Привет'

GUICtrlSetData($gui.hwnd.label_username,$gui.value.label_username)
GUISetState($gui.state.form)

Sleep(10000)
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Давно ждал подобного в AutoIt, но со временем как то и перестал нуждаться в подобном.
(в кратце)

Код:
Global Const Enum $_ST_HWND, $_ST_VALUE, $_ST_STATE

Local $gui[3]

$gui[$_ST_HWND] = 'test'
$gui[$_ST_VALUE] = 'test'
$gui[$_ST_STATE] = 'test'


И поэтому не планирую переходить на новую версию. Все их "примочки" лишь воздействуют на скорость, а в AutoIt она и так не идеальна.


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

inververs [?]
Это, получается, возможный аналог коллекции или ассоциативного массива?
Ну не ассоциативного массива это точно.
 

AZJIO

Меценат
Меценат
Сообщения
2,878
Репутация
1,194
OffTopic:
madmasles [?]
Можно не указывать, это значение по умолчанию, если не указано другое (1 или 2).
Добавил в справку.


firex [?]
И поэтому не планирую переходить на новую версию. Все их "примочки" лишь воздействуют на скорость, а в AutoIt она и так не идеальна.
Воздействуют, но не обязательно ухудшают. Переходить на бетку глупо, об этом сам автор говорил. Не переходить на новую тоже нельзя сказать разумным решением. По мере обсуждения на офсайте слишком много реально полезных обновлений. Самое яркое для меня - обновлённый движок рег. выр. с поддержкой UTF. По остальным: обновляются функции, добавляются новые.
 
Верх