PDA

Просмотр полной версии : [Вопрос] Возвращение результаов функции в несколько переменных



Jeff_Monson
13.12.2015, 22:35
Всем добра! Можно-ли вернуть несколько значении при помощи return оператора?
т.е для примера, я хочу узнать координаты игрока


stock player_getPos(playerid) {
new Float:x, Float:y, Float:z;//создаем переменные
GetPlayerPos(playerid, x, y, z);//узнаем координаты игрока и записываем в переменные координаты. (если память не изменяет)
return x, y, z;//возвращаем координаты
}

public OnPlayerCommandText(playerid, cmdtext[]) {
if (strcmp("/test", cmdtext, true, 10) == 0) {
new x, y, z = player_getPos(playerid);
printf("x = %f, y = %f, z = %f", x, y, z);//выводим данные
return 1;
}
return 0;
}

Возможно вопрос глуповатый, не кидайтесь помидорами =)

L0ndl3m
13.12.2015, 22:40
В других ЯП, например в Lua – можно. В pawn же это можно сделать с помощью так называемых "костылей".

VVWVV
13.12.2015, 22:42
Нет, возвращается только последнее значение, а именно значение переменной z.

Можно сделать с помощью ссылок, например:

AnotherFunction(&a, &b)
{
a = b;
b = 5;
}

L0ndl3m
13.12.2015, 22:49
Как вариант, VVWVVV предложил вам использовать ссылки.

Такие функции как:

GetPlayerPos
GetPlayerFacingAngle
GetPlayerHealth
etc...

уже работают по данному способу.

VVWVV
13.12.2015, 22:51
Как вариант, VVWVVV предложил вам использовать ссылки.

Такие функции как GetPlayerPos, GetPlayerFacingAngle, GetPlayerHealth, etc... уже работает по данному способу.

Забыл про ссылки, вспомнил, когда уже сохранял.

Jeff_Monson
13.12.2015, 22:56
Нет, возвращается только последнее значение, а именно значение переменной z.

Можно сделать с помощью ссылок, например:

AnotherFunction(&a, &b)
{
a = b;
b = 5;
}
Можно пример с моим примером?):blush2:

- - - Добавлено - - -


В других ЯП, например в Lua – можно. В pawn же это можно сделать с помощью так называемых "костылей".
Согласен в Lua можно, Костыли везде костыли...

VVWVV
14.12.2015, 07:27
Можно пример с моим примером?):blush2:

- - - Добавлено - - -


Согласен в Lua можно, Костыли везде костыли...


stock player_getPos(playerid, &Float:x, &Float:y, &Float:z) {
GetPlayerPos(playerid, x, y, z);//узнаем координаты игрока и записываем в переменные координаты. (если память не изменяет)
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[]) {
if (strcmp("/test", cmdtext, true, 10) == 0) {
new Float:x, Float:y, Float:z;
player_getPos(playerid, x, y, z);
printf("x = %f, y = %f, z = %f", x, y, z);//выводим данные
return 1;
}
return 0;
}