Что нового

[Ошибки] Вызов функции как элемента массива

akoulev

Новичок
Сообщения
169
Репутация
2
А можно ли вот так?

Код:
Dim $ArrayFunc [5] = ["Yabloko()","Grusha()","Ananas()","Apelsin()","Batat()"]
...; Много всяко-разного. 
$i = $Parampampam + 1; Где $i [b]ТОЧНО[/b] входит в диапазон от 0 до 4.
 Call("$ArrayFunc[$i]"); Вызов функции, как элемента массива


У меня не получается: причём, просто не работает, — но и ошибок не выдаёт.

Ай нид хелп, плиз!

PS: - Добавлено: http://autoit-script.ru/index.php/topic,14160.msg89429.html#msg89429: "Функции теперь являются объектами первого класса, это означает что переменные могут "указывать" на них и эта функция может быть вызвана через переменную". — ПЕРЕВЕДИТЕ, pls, в практическое русло! :stars: Означает ли это, что мне надо ставить эту AutoIt 3.3.9.6 (бета)? Я на 3.3.6 — версия SciTE-Lite.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
akoulev,
Код:
Global $aArrayFunc[5] = ['Yabloko()', 'Grusha()', 'Ananas()', 'Apelsin()', 'Batat()'], $iRand

HotKeySet('{Esc}', '_Exit')
While 1
	Sleep(500)
	$iRand = Random(0, 4, 1)
	ConsoleWrite($iRand & @TAB & $aArrayFunc[$iRand] & @LF)
	Execute($aArrayFunc[$iRand])
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func Yabloko()
	MsgBox(64, 'Info', 'Yabloko')
EndFunc   ;==>Yabloko

Func Grusha()
	MsgBox(64, 'Info', 'Grusha')
EndFunc   ;==>Grusha

Func Ananas()
	MsgBox(64, 'Info', 'Ananas')
EndFunc   ;==>Ananas

Func Apelsin()
	MsgBox(64, 'Info', 'Apelsin')
EndFunc   ;==>Apelsin

Func Batat()
	MsgBox(64, 'Info', 'Batat')
EndFunc   ;==>Batat
Или
Код:
Global $aArrayFunc[5] = ['Yabloko', 'Grusha', 'Ananas', 'Apelsin', 'Batat'], $iRand

HotKeySet('{Esc}', '_Exit')
While 1
	Sleep(500)
	$iRand = Random(0, 4, 1)
	ConsoleWrite($iRand & @TAB & $aArrayFunc[$iRand] & @LF)
	Call($aArrayFunc[$iRand])
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func Yabloko()
	MsgBox(64, 'Info', 'Yabloko')
EndFunc   ;==>Yabloko

Func Grusha()
	MsgBox(64, 'Info', 'Grusha')
EndFunc   ;==>Grusha

Func Ananas()
	MsgBox(64, 'Info', 'Ananas')
EndFunc   ;==>Ananas

Func Apelsin()
	MsgBox(64, 'Info', 'Apelsin')
EndFunc   ;==>Apelsin

Func Batat()
	MsgBox(64, 'Info', 'Batat')
EndFunc   ;==>Batat
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
akoulev
Код:
Dim $ArrayFunc [5] = ["Yabloko","Grusha","Ananas","Apelsin","Batat"]
...; Много всяко-разного. 
$i = $Parampampam + 1; Где $i [b]ТОЧНО[/b] входит в диапазон от 0 до 4.
 Call($ArrayFunc[$i]); Вызов функции, как элемента массива
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
akoulev [?]
Означает ли это, что мне надо ставить эту AutoIt 3.3.9.6 (бета)? Я на 3.3.6 — версия SciTE-Lite.
означает что надо ставить 3.3.10.2 - стабильную версию и все инструменты.
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
> надо ставить 3.3.10.2

Я бы и рад ставить 3.3.10.2; только что-то в разделе "http://autoit-script.ru/index.php/board,1.0.html" пока нет этой версии. Ау, други-администраторы! Добавите? А то там последняя версия — это AutoIt 3.3.9.9 (бета).
А у официалов только SciTE4AutoIt3.exe обнаруживаю, — что, конечно, прекрасно, но явно маловато.
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Или проще.
Я запускаю прилагаему программу "Check For Updates"
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
[box title=Цитата]>Чем обнаруживаете, позвольте узнать.[/box]

Глазками, вестимо — моими подслеповатыми глазками. Спасибо за ссылку.
Кста.! А можно ли ставить новую версию просто поверх? Понятно, что по Правилам Большой Науки, надо сперва удалить, потом перезагрузиться, потом прогнать check_disk, потом дефрагментировать, потом проверить на вирусы, ещё разок перегрузиться — и только тогда ставить новую версию. Но если без маньячества, — можно или нет?

Впрочем, вот и ответ: поставил — работает. Сделать низкоуровневое переформатирование диска не просит. ;D

[box title=Цитата]>...прилагаемую программу "Check For Updates"[/box]
А где такое прилагается? У меня нет. Впрочем, после обновления, авось, появится. —
Не появилось! :scratch:
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
akoulev сказал(а):
А где такое прилагается?

Через "пуск" можно найти данный ярлык.
А так:
Объект: "..\AutoIt3\AutoIt3.exe" "..\AutoIt3\Extras\AutoUpdateIt\AutoUpdateIt.au3"
Рабочая папка: "..\AutoIt3\SciTE\Defs\Production"

Вместо '..\AutoIt3' подставить адрес AutoIt
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
Всем спасибо: всё работает. Тему закрываю.
 
Верх