Если сделать функцию
function D takes string s returns nothing
И после объявить функцию с таким же именем
function D takes integer i returns nothing
Будет ошибка компиляции, "function redeclarated"
Вопрос - Можно ли объявить 2 Функции с одинаковыми именами?
`
ОЖИДАНИЕ РЕКЛАМЫ...
Ответы (5)
8
Extremator, вот, хотел с одним именем сделать
function DS takes string s returns nothing
DisplayTextToForce( GetPlayersAll(), s)
endfunction
function DI takes integer i returns nothing
DisplayTextToForce( GetPlayersAll(), I2S(i))
endfunction
function DR takes integer r returns nothing
DisplayTextToForce( GetPlayersAll(), R2S(r))
endfunction

function DU takes unit u returns nothing
DisplayTextToForce( GetPlayersAll(), I2S(U2I(u)))
endfunction
26
Tredor46, ну могу тебе такой вариант предложить...
Пишешь одну и туже функцию и ставишь везде null кроме нужного, но... Такое себе, чесно говоря.
А еще у тебя в функции DR принимается interer вместо real
function DAll takes string s, integer i, real r, unit u returns nothing
    if s == null then
        if i != null then
            set s = I2S(i)
        elseif r != null then
            set s = R2S(i)
        elseif u != null then
            set s = I2S(U2I(u))
        endif
    endif
    call DisplayTextToForce( GetPlayersAll(), s )
endfunction
16
Tredor46, ты можешь посмотреть реализацию макросов для дебаг сообщений в cJASS. Но вообще лучше не делать этого
8
Extremator, твой вариант для меня не потходит, функция D должна была просто ускорять "проверку кода на наличие ошибок", поэтому я хотел её перегрузить, чтобы я мог поместить в неё что угодно и оно мне это вывело как тескт
p.s. Спасибо за найденную опечатку, сейчас исправлю
25
Варик слишком старый движок для таких манипуляций)
28
Максимум в разных библиотеках/скопах с приставкой private/public. Но по сути там просто имя библиотеки префиксом добавляется
9
Вот тебе несколько вариантов, передается один аргумент и конвертируется в строку или же возвращает строку, по такой же логике можешь допилить остальное и оптимизировать.
function CheckChar takes string char returns integer
    if char == "0" or char == "1" or char == "2" or char == "3" or char == "4"  then
        return 1;
    elseif char == "5" or char == "6" or char == "7" or char == "8" or char == "9"  then
        return 1;
    elseif char == "." then
        return 10;
    else 
        return 0
    endif
endfunction

function LenghtArg takes string arg returns integer
    local string char
    local integer i = 0
    local integer len = StringLength(arg)
    local integer lenArg = 0
    loop
        exitwhen i >= len
        set char = SubString(arg, i, i + 1)
        set lenArg = CheckChar(char) + lenArg
        set i = i + 1
    endloop
    return lenArg;
endfunction

function B2S takes boolean b returns string
    if b then
        return "true"
    endif
    return "false"
endfunction

function DS takes string arg returns nothing
    //Храним длину аргумента
    local integer lenght = StringLength(arg)
    //Проверяем каждый символ и возвращаем длину
    local integer len = LenghtArg(arg)

    if arg == "true" then
        call BJDebugMsg("boolean: " + arg)
        /* ТВОЙ КОД */
        return;
    endif
    
    if arg == "false" then
        call BJDebugMsg("boolean: " + arg)
        /* ТВОЙ КОД */
        return;
    endif
    
    if lenght == 0 then
        call BJDebugMsg("Пустая строка")
        /* ТВОЙ КОД */
        return;
    endif
    
    if lenght==(len - 9) then
       call BJDebugMsg("real: " + arg)
       /* ТВОЙ КОД */
       return;
    endif
    
    if lenght==len then
       call BJDebugMsg("int: " + arg)
       /* ТВОЙ КОД */
       return;
    endif
    
    call BJDebugMsg("str: " + arg)
        /* ТВОЙ КОД */
endfunction

function DR takes string arg returns string
    local integer lenght = StringLength(arg)
    local integer len = LenghtArg(arg)

    if arg == "true" then
        return "true"
    endif
    
    if arg == "false" then
        return "false"
    endif
    
    if lenght == 0 then
        return "null"
    endif
    
    if lenght==(len - 9) then
        return "real"
    endif
    
    if lenght==len then
        return "int"
    endif
        return "str"
endfunction

function Trig_Smeto_Actions takes nothing returns nothing
    local string str 
    local integer Int = 10
    local real Real = 10.23
    local boolean B = true
    local string overload
    call DS(R2S(Real))  //real
    call DS(I2S(Int))   //int
    call DS("")         //Пустая строка
    call DS("10")       //int
    call DS("10.001")   //real
    call DS("10.01")    //real
    call DS(" 10.01")   //str
    call DS("a")        //str
    call DS(B2S(B))     //boolean
    /////////////НИЖЕ ИЗВРАЩЕНИЯ////////////////////
    if DR("a") == "str" then
        /* ТВОЙ КОД */
    endif
    ////////////ДЛЯ ФУНКЦИЙ С типа АРГУМЕНТАМИ//////////////
    set overload = DR("a")
    if overload == "str" then
        set DSTR = "Hello World"
        call ExecuteFunc("D"+overload);
    endif
    
    set overload = DR(I2S(Int))
  
    if overload == "int" then
        set DINT = Int
        call ExecuteFunc("D"+overload);
    endif
    
    set overload = DR(R2S(Real))
    if overload == "real" then
        set DREAL = Real
        call ExecuteFunc("D"+overload);
    endif
     ///////////ДЛЯ ФУНКЦИЙ БЕЗ АРГУМЕНТОВ//////////////////
     call ExecuteFunc("D"+DR("a"))
endfunction

globals
    string DSTR
    integer DINT
    real    DREAL
endglobals

function Dstr takes nothing returns nothing
    call DisplayTextToForce( GetPlayersAll(), DSTR)
endfunction
function Dint takes nothing returns nothing
    call DisplayTextToForce( GetPlayersAll(), I2S(DINT))
endfunction
function Dreal takes nothing returns nothing
    call DisplayTextToForce( GetPlayersAll(), R2S(DREAL))
endfunction


//===========================================================================
function InitTrig_Smeto takes nothing returns nothing
    set gg_trg_Smeto = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Smeto, function Trig_Smeto_Actions )
endfunction
25
Чего только не придумают, лишь бы на lua не переходить
Ответы (5)
8
fenathesnake, angelscript это не мод? типа как UjAPI
С ним смогу же другие люди играть, без дополнительной загрузки чего-либо?
15
Tredor46, ога, мод, точнее плагин к ужапи. Мое дело предложить 😏
8
fenathesnake, моё дело отказаться 😏
У некоторых моих друзей айкью не хватит чтобы это подключить, да и с другими рандомными поиграть не смогу
Ответы (1)
8
Алексей Андреич, спасибо, но не потходят, мне нужно чтобы аргументы были разные, но их количество было равно = 1
Чтобы оставить комментарий, пожалуйста, войдите на сайт.