Почему нелзья задать параметр по умолчание функции

private function name takes integer parameter = 5 returns nothing
endfunction
где parameter если не задано значение то по умолчание брать 5, это пример кода.

Принятый ответ

Перегрузка макросов

Определение в пределах одной области видимости нескольких макросов с одинаковыми именами не вызовет ошибки, если они отличаются количеством принимаемых аргументов. Такие макросы называются перегружеными. В зависимости от количества переданных при вызове аргументов, будет вызван тот или иной из перегруженных макросов.

  define {
      msg(text)              = DisplayTextToPlayer(GetLocalPlayer(), text, 0, 0)
      msg(text,playerid)     = DisplayTextToPlayer(Player(playerid), text, 0, 0)
      msg(text,playerid,x,y) = DisplayTextToPlayer(Player(playerid), text, x, y)
  }
  
  nothing test() {
      msg("test 1")
      msg("test 2", 1)
      msg("test 3", 2, 0.1, 0.1)
  }
будет транслировано в следующее:

  function test takes nothing returns nothing
      call DisplayTextToPlayer(GetLocalPlayer(), "test 1", 0, 0)
      call DisplayTextToPlayer(Player(1), "test 2", 0, 0)
      call DisplayTextToPlayer(Player(2), "test 3", 0.1, 0.1)
  endfunction
Внимание! Если в перегруженной группе есть макрос, не принимающий аргументов, его все равно необходимо записывать с указанием пустых скобок после него.
а так jass писался очень давно
3
17
7 лет назад
3
Перегрузка макросов

Определение в пределах одной области видимости нескольких макросов с одинаковыми именами не вызовет ошибки, если они отличаются количеством принимаемых аргументов. Такие макросы называются перегружеными. В зависимости от количества переданных при вызове аргументов, будет вызван тот или иной из перегруженных макросов.

  define {
      msg(text)              = DisplayTextToPlayer(GetLocalPlayer(), text, 0, 0)
      msg(text,playerid)     = DisplayTextToPlayer(Player(playerid), text, 0, 0)
      msg(text,playerid,x,y) = DisplayTextToPlayer(Player(playerid), text, x, y)
  }
  
  nothing test() {
      msg("test 1")
      msg("test 2", 1)
      msg("test 3", 2, 0.1, 0.1)
  }
будет транслировано в следующее:

  function test takes nothing returns nothing
      call DisplayTextToPlayer(GetLocalPlayer(), "test 1", 0, 0)
      call DisplayTextToPlayer(Player(1), "test 2", 0, 0)
      call DisplayTextToPlayer(Player(2), "test 3", 0.1, 0.1)
  endfunction
Внимание! Если в перегруженной группе есть макрос, не принимающий аргументов, его все равно необходимо записывать с указанием пустых скобок после него.
а так jass писался очень давно
Принятый ответ
0
32
7 лет назад
0
Viktor19, таков синтаксис, сначала объяви функцию, а потом вызови и дай аргумент!
Функция может возвращать константное значение (частенько юзается в картах близзардов).
constant function A takes nothing returns integer nothing
	return 5
endfunction

function B takes integer i returns nothing
//some code
endfunction

call B( A()) 
// можно сделать еще так
function B takes integer i returns nothing
if i == 0 then
	set i = A( ) // ну можно пользоваться просто глобальной переменной, на хайве это считается эталоном - юзать константные функции для установки //настроек
endif
// some code
endfunction
endfunction
0
28
7 лет назад
0
на то воля божья
ledoed:
а так jass писался очень давно
не так давно как c++
но в c++ значение параметра по умолчанию есть а в jass нету
ибо как я уже писал
на то воля божья
Чтобы оставить комментарий, пожалуйста, войдите на сайт.