Проблема с Takes/Returns
|
|
LanceloTo | Дата: Понедельник, 22 Августа 2011, 11:12:15 | Сообщение # 1 |
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
| Я только начинаю изучать Jass и уже немного понимаю, что да как... Вот только никак не могу разобратся с Takes/Returns. Просто для пробы, я создал тригг который при отправке в чат "а", делает такие действия: в функции B1 создает локальную переменную, заносит в нее значение 500, возвращает значение "return n". во второй функции (B2) получает значение n и выводит его как I2S(n). Получается, что написании в чат "а" выдает фатальную ошибку. Условия нет, в событии также создаются новые функции B1 и B2.
мб нельзя так перемещать значения из функции в функцию? Обьясните плз
|
|
|
|
Hexing | Дата: Понедельник, 22 Августа 2011, 12:53:11 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| http://img607.imageshack.us/img607/271/helping.png
Вот так, вызвав функцию PrintNumber мы напечатаем 500. Надеюсь, помогло.
|
|
|
|
LanceloTo | Дата: Понедельник, 22 Августа 2011, 13:15:42 | Сообщение # 3 |
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
| Hexing, Спасибо конечно, но это я и так знаю ))) Просто я хочу понять, почему если в одной функции я заношу в лок. переменную число и возвращаю, я не могу принять в другой функции (в этом же триггере) это число.
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 13:32:08 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (LanceloTo) я не могу принять в другой функции (в этом же триггере) это число. локальные переменные работают только в рамках одной функции. Чтобы принять значения из одной функции в другой используй глобальные переменные.
Добавлено (22 Август 2011, 13:32:08) --------------------------------------------- Hexing, Это ты написал? Пфф оно не стоит того чтоб тратить на это силы. Есть куча статей пусть читает.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 13:32:49 |
|
|
|
LanceloTo | Дата: Понедельник, 22 Августа 2011, 13:40:59 | Сообщение # 5 |
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
| lawson, Надо же, а я где то слышал, что локальные переменные работают только в рамках одного ТРИГГЕРА... Даже если на гуи пикать юнитов и делать действия с лок. переменными в cs, все будет норм (хотя на жассе это разные функции).
Тем более все правильно он сделал, мб еще какойнить новичек наткнется на это, получит больше, чем от статьи.
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 14:13:45 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (LanceloTo) Надо же, а я где то слышал, что локальные переменные работают только в рамках одного ТРИГГЕРА Хреново ты слышал. Переменные локальные можно переносить в другие функции только когда эти функции чтото берут или через хеш.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 14:27:24 |
|
|
|
LanceloTo | Дата: Понедельник, 22 Августа 2011, 14:56:56 | Сообщение # 7 |
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
| lawson, Я передавал переменную через "return n" (returns integer) и принимал takes integer
|
|
|
|
Artas_Undead | Дата: Понедельник, 22 Августа 2011, 15:06:34 | Сообщение # 8 |
9 уровень
Группа: Проверенные
Сообщений: 1953
Награды: 0
Репутация: 365
Блокировки:
| Ты хоть код дай
|
|
|
|
LanceloTo | Дата: Понедельник, 22 Августа 2011, 15:29:04 | Сообщение # 9 |
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
| Artas_Undead, сейчас выложу Добавлено (22 Август 2011, 15:29:04) ---------------------------------------------
Code function B2 takes nothing returns integer local integer n = 500 return n endfunction
function B1 takes integer n returns nothing call DisplayTextToForce( GetPlayersAll(), I2S(n) ) endfunction
//=========================================================================== function InitTrig_B takes nothing returns nothing set gg_trg_B = CreateTrigger( ) call TriggerRegisterPlayerChatEvent( gg_trg_B, Player(0), "а", true ) call TriggerAddAction( gg_trg_B, function B1 ) call TriggerAddAction( gg_trg_B, function B2 ) endfunction
Я прошлую закрыл, на скорою руку накатал новый триг.
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 15:34:00 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Вот как надо. function B2 takes nohting returns integer local integer n = 500 return n endfunction
function B1 takes nothing returns nothing call DisplayTextToForce( GetPlayersAll(), I2S(B2()) ) endfunction
Поясняю. Так как ты хотел нельзя так как перменную которую функция берет и которую возвращает РАЗНЫЕ это не одна и таже переменная. Это одно и тоже если сделать так: В одной функции написать local n = 500 (это перменная 1) В другой написать local n = 500 (это уже перменная 2) Тоесть переменные имеют одинаковые значения и названия но они разные по их id. Если не понял то тогда перечитай статьи по переменным.
Quote (LanceloTo) call TriggerAddAction( gg_trg_B, function B1 ) call TriggerAddAction( gg_trg_B, function B2 ) Что это такое вообще?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 15:50:33 |
|
|
|
LanceloTo | Дата: Понедельник, 22 Августа 2011, 16:54:04 | Сообщение # 11 |
4 уровень
Группа: Проверенные
Сообщений: 94
Награды: 0
Репутация: 6
Блокировки:
| lawson, все, спасибо. Я понял что ты имеешь ввиду)))
Quote (lawson) Что это такое вообще?
Хм.. Этож вроде как создает функцию и приобщает для одного триггера.
|
|
|
|
lawson | Дата: Понедельник, 22 Августа 2011, 16:58:13 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (LanceloTo) Этож вроде как создает функцию и приобщает для одного триггера. Ладно забуть про это. Создай триггер на гуи и переведи его в текст может че увидишь.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 22 Августа 2011, 21:40:34 |
|
|
|