Сейчас 08:12:37 Пятница, 29 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Проблема с 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
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz