|
![]() |
#1 |
Участник
|
Вопрос в том что понимать под "... и параметр изменяется в методе".
X++: static void JobTestCommonParameter(Args _args) { CustTable CustTable; void testMethod(CustTable _CustTable) { CustTable CustTable2; ; CustTable2.clear(); _CustTable = CustTable2; } ; select CustTable; info(CustTable.AccountNum); testMethod(CustTable); info(CustTable.AccountNum); } В книге написано, что если передавать в метод ссылку на "временный" common, то ссылка (табличная переменная) будет передана по ссылке ![]() Что такое изменение табличной переменной? Это присваивание ссылки на другой объект или обнуление ссылки Последний раз редактировалось S.Kuskov; 17.08.2011 в 11:10. |
|
![]() |
#2 |
Сам.AX
|
Цитата:
![]() X++: static void JobTestCommonParameter(Args _args) { CustTable custTable; void testMethod(CustTable _custTable) { _custTable.clear(); } select custTable; info(custTable.AccountNum); testMethod(custTable); info(custTable.AccountNum); } Может, все-таки, я чего-то не догоняю? ![]()
__________________
ѣ |
|
![]() |
#3 |
Сам.AX
|
Изменив первый джоб еще немного:
X++: void testMethod(CustTable _custTable)
{
CustTable custTable2;
custTable2 = _custTable;
custTable2.clear();
}
__________________
ѣ |
|
![]() |
#4 |
Сам.AX
|
В общем, смысл я понял
![]() X++: void callByReference(TmpAccountSum _tmpAccountSum) { TmpAccountSum tmpAccountSum; ; tmpAccountSum = _tmpAccountSum; select firstonly tmpAccountSum order by accountNum desc; { info(tmpAccountSum.accountNum); } }
__________________
ѣ |
|
![]() |
#5 |
Участник
|
На самом деле у меня не получилось найти то действие которое бы изменяло/не изменяло параметр по разному для временных/постоянных таблиц. Так что я тоже в замешательстве. Что именно имелось в виду в книге не понятно
|
|
![]() |
#6 |
Сам.AX
|
Цитата:
X++: static void JobTestCommonParameter(Args _args) { _TmpTable tmpTable; void testMethod(_TmpTable _tmpTableParm) { _tmpTableParm = null; } ttsbegin; tmpTable.selectForUpdate(); tmpTable.NumberOf = 1; tmpTable.insert(); ttscommit; select tmpTable; info(strfmt("%1",tmpTable.NumberOf)); testMethod(tmpTable); info(strfmt("%1",tmpTable.NumberOf)); }
__________________
ѣ |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от maximka
![]() В общем, смысл я понял
![]() X++: void callByReference(TmpAccountSum _tmpAccountSum) { TmpAccountSum tmpAccountSum; ; tmpAccountSum = _tmpAccountSum; select firstonly tmpAccountSum order by accountNum desc; { info(tmpAccountSum.accountNum); } } X++: tmpAccountSum.setTmpData(_tmpAccountSum); Последний раз редактировалось ice; 17.08.2011 в 12:02. |
|
![]() |
#9 |
Сам.AX
|
Так работает как и должно, ибо никаких ссылок не используется. Вопрос-то в том, что автор книги говорит о разном поведении системы для временной и обычной таблиц при передаче их через параметры. Чего я не смог повторить.
__________________
ѣ |
|
![]() |
#10 |
Участник
|
Цитата:
![]() А вот использование setTmpData() - это как раз таки передача ссылки на временную таблицу. Причем, tmpAccountSum окажется на той же строне, что и _tmpAccountSum, но значения в этих переменных будут независимы (с привязкой к одной и той же временной таблице, естественно). Передать данные из временной таблицы на другую строну можно только последовательным копированием и вставкой.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|