Страница 1 из 1
Оператор RETURN
Добавлено: 15 Сентябрь 2006, 6:17
ShilakAV
Может кто объяснить чем отличается RETURN var от RETURN(var)?
Читаю хелп, ничего не понимаю ((
Добавлено: 15 Сентябрь 2006, 9:02
Dias2004
А есть примеры кода, когда эти отличия проявляются?
Я попробовал - компилятор проглатывает оба варианта, и поведение функции не изменяется. Функция написана на template Source, возвращает переменную типа real, программа в целом собрана как один exe - модуль.
Добавлено: 15 Сентябрь 2006, 9:03
Admin
по моему ничем не отличается ...
так же как и
self.var &= new(variable)
и
self.var &= new variable
Добавлено: 15 Сентябрь 2006, 9:17
Дед Пахом
RETURN имеет только один вид:
RETURN [expression]
а [expression] может быть как со скобками, так и без ( к ретурну это уже не относится).
А теперь цитата из русского хелпа:
Выражение в круглых скобках – это выражение допустимое с точки зрения синтаксиса. Если в круглые скобки заключена переменная, то выражение разыменовывается значением этой переменной и преобразуется в один из базовых типов. Относительно использования скобок с RETURN, если функция имеет тип возвращаемой переменной, возвращаемая переменная использованныя в операторе RETURN не должна заключаться в круглые скобки.
Всё ясно?

Добавлено: 15 Сентябрь 2006, 10:38
try-catch
Суть в том, что возвращаемое значение может быть или byRef или valueType. В первом случае передается только референс на переменную, но не значение самой переменной. Во втором случае - само значение.
Иначе говоря RETURN (Val), говорит компилятору о том что Val необходимо всегда приводить к значению, даже если это референс. Например, если Val это CLASS или INTERFACE, компилятор должен выдать ошибку.
Так ли это на самом деле не проверял...
Добавлено: 15 Сентябрь 2006, 11:09
Yufil
try-catch писал(а):Суть в том, что возвращаемое значение может быть или byRef или valueType. В первом случае передается только референс на переменную, но не значение самой переменной. Во втором случае - само значение.
Иначе говоря RETURN (Val), говорит компилятору о том что Val необходимо всегда приводить к значению, даже если это референс. Например, если Val это CLASS или INTERFACE, компилятор должен выдать ошибку.
Так ли это на самом деле не проверял...
Именно так. Очень часто встречается в классах
S &CString
NewString procedure(String S),&CString
Local &CString
Code
Local &= New Cstring(Len(S)+1)
Local = S
Return Local
После вызова S &= NewString('Строка') в процедуре будет создана строка и ссылка присвоена S. Если написать Return(Local) - ссылка должна быть разыменована.
Добавлено: 16 Сентябрь 2006, 7:42
ShilakAV
Ну в общем ясно... спасибо всем! Надо бы "цитату из русского хелпа" соответствующим образом подправить, а то читаешь и ум ра разум заходит
