Что нового

[Данные, строки] 'Return': как вернуть 2 (два) значения?

akoulev

Новичок
Сообщения
164
Репутация
2
Пример из help-а:
Код:
Func today()  ;Return the current date in mm/dd/yyyy form
    return (@MON & "/" & @MDAY & "/" & @YEAR)
EndFunc

наводит на мысль, что 2 значения вернуть можно. Но - КАК?
Уточню - хотелось бы получить $Lelik и $Bolik примерно так:
Код:
$Value = Alkid($Buch)
MsgBox(0, "", $Value, 4)

Func Alkid($tatry)
    
    ...
    
    Return $Lelik
    Return $Bolik
EndFunc   ;==>Alkid
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Re: [Данные, строки] \'Return\': как вернуть 2 (два) значения?

akoulev сказал(а):
наводит на мысль, что 2 значения вернуть можно. Но - КАК?
Можно возвратить массив :
Код:
$aRet=$1 & '|' & $2
Return $aRet

Можно через Byref



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

Можно использовать в качестве разделителя любой символ .
Получить значения затем через StringSplit
 
Автор
A

akoulev

Новичок
Сообщения
164
Репутация
2
А как через 'Byref'? Я почитал Help - понял так, что это механизм разного входа в функцию (но и то, пока не до конца осознал, "чё-как"...)
 
Автор
A

akoulev

Новичок
Сообщения
164
Репутация
2
Спасибо; в общем, вот как у меня заработало:
Код:
EnvUpdate ( )
WinActivate ("Важная программа управления _Ш_елезякой.")
;$Lelik7=Alkid();
Dim $aRet[2] = [0,1]; задаём массив и начиняем его всякой дефолтной, ненужной хренью.
Alkid();
MsgBox(0, $aRet[0], $aRet[1] & ", - вот как называется это окно.", 4);
EnvUpdate ( )
Exit; - Se fini

Func Alkid()
	$brom=PixelChecksum ( 119, 84, 136, 99, 2 )
	$Bolik=-2
	;MsgBox(0, "", $brom,15)
	;Exit
		;1;  194345292 ; Кaтaлoг
		;2; 2325848494 ; Кoнфиrypaция
		;3; 3199693443 ; Учёт
		;4; 2274399351 ; Oтчёты
		;5; 3859973805 ; Aвapийныe cиrнaлы
		;6; 2241759553 ; Плaниpoвщик
		;7; 1413970315 ; Oбcлyживaниe
		;8; 2188171049 ; Нихрена-чистое окно
		;         1                      2                            3                     4                      5                                  6                           7                             8                                                 9                                       10                                                                                                                                                                                11
Dim $array[22] = [194345292 , "Кaтaлoг", 2325848494 , "Кoнфиrypaция", 3199693443 , "Учёт", 2274399351 , "Oтчёты", 3859973805 , "Aвapийныe cиrнaлы" , 2241759553 , "Плaниpoвщик" , 1413970315 , "Oбcлyживaниe" , 2188171049 , "Ничего не запущено - чистое окно" , 3141177588 , "Длитeльнocть нa aппapaт", 1470744785 , "Ну не успеваю я - антивирь, небось, опять бесчинствует, извините... Словом, требуется отладка!", 0 , "Хрень какая-то; требуется отладка!"]
Dim $aRet[2] = [0,1]
While $Bolik<=UBound($array)-3
	$Bolik=$Bolik+2
;MsgBox(0, $Bolik/2+1, $array[$Bolik] & ", что значит """ & $array[$Bolik+1] & """", 1)
If $brom=$array[$Bolik] Then ExitLoop
WEnd
;Sleep(1111)
$Lelik=$Bolik/2+1
;MsgBox(0, $Lelik, """" & $array[$Bolik+1] & """", 4); $Bolik/2+1 - правдивый номер окна, согласно списка выше

	;$aRet=$Lelik|$array[$Bolik+1] ТАК НЕ ПАШЕТ, НЕ ВОСПРИНИМАЕТ ТАКОЙ РАЗДЕЛИТЕЛЬ
	$aRet[0]=$Lelik
	$aRet[1]=$array[$Bolik+1]
Return $aRet
EndFunc
 

SyDr

Сидра
Сообщения
651
Репутация
158
Можно через SetExtended

Часть функиций таким образом вовзращает дополнительную информацию.
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Я не совсем понял что у тебя в функции Alkid() ,
Но так должно работать : (Органицация Return -а должна быть примерно такой )
Код:
#include <Array.au3>
   
$Rez= Alkid();
$aRezultat=StringSplit($Rez,'|')
_ArrayDisplay($aRezultat)

Func Alkid()
	;..............	
	;..............	
	$Lelik=10
	$Bolik=20
	$aRet= $Lelik & '|' & $Bolik
	Return $aRet
EndFunc
 
Верх