Общий раздел по AutoIt > Баг-репорты и запросы на новые функции

SetError() не работает так, как заявлено в справке.

(1/4) > >>

Garrett:
По идеи как я понял из справки SetError() не только должна возвратить три параметра (два из них опционально) но и перекрыть возвращаемое функцией значение, если указан третий параметр.
Но, вот пример:
Код: AutoIt $Result = test()
ConsoleWrite("Error: " & @error & @CRLF & "Extended: " & @extended & @CRLF & "Value: " & $Result & @CRLF)
Func test()
    SetError(1, 10, 500)
EndFunc
 
Функция тут должна вернуть (как заявлено в справке) три значения, @error, @extended и значение переменной $Result.
Но по факту значение переменной $Result не возвращается!

Однако если написать так:
Код: AutoIt Return SetError(1, 10, 500)
Значение $Result  возвращается!

Как говорил Бунша Иван Васильевич:

--- Цитировать ---"Меня опять терзают смутные сомнения. У Шпака - магнитофон, у посла - медальон... "
--- Конец цитаты ---
Вот и меня терзают, не баг ли это?
Что скажите коллеги?

Yashied:
Не баг.

Функции в AutoIt всегда возвращают только то, что следует за "Return". Если "Return" отсутствует, то всегда (?) возвращается 0. А третий параметр в функции SetError(), это просто "сквозное" значение, т.е. SetError() его просто тупо возвращает.

Код: AutoIt ConsoleWrite(SetError(1, 10, 500) & @CR)

И это действительно очень удобно.

Код: AutoIt Return SetError(1, 10, 500)

Т.е. 500 проходит на выход SetError() и попадает на "Return" а затем на выход пользовательской функции.

По-другому можно записать так:

Код: AutoIt Func test()
    SetError(1, 10)
    Return 500
EndFunc


--- Цитировать ---Танцуют все...
--- Конец цитаты ---

SyDr:
Уже расписали, ну да ладно:
Garrett  [?]

--- Цитировать ---но и перекрыть возвращаемое функцией значение, если указан третий параметр.
--- Конец цитаты ---
Как написано, так и делает :)
Параметры
return value [optional] Override the default return value and return this parameter.
Перекрывает возвращаемое значение по умолчанию (самой функции SetError, а не какой-либо другой функции) и возвращает этот параметр.

FlatX007:
ещё так можно

Код: AutoIt Func _1()
   
    If SetError(1, 0, 1) Then Return 1
   
EndFunc

Yashied:

--- Цитата: FlatX007 от Август 06, 2010, 12:04:55 ---ещё так можно

Код: AutoIt Func _1()
   
    If SetError(1, 0, 1) Then Return 1
   
EndFunc

--- Конец цитаты ---

:blink:

Это абсурд. В таком случае можно и так:

Код: AutoIt If 1 Then
    Return SetError(1, 0, 1)
EndIf

Нужно писать так:

Код: AutoIt Return SetError(1, 0, 1)

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии