如果未传递参数,则使用默认值

If parameter isn't passed then use default

本文关键字:默认值 参数 如果      更新时间:2023-10-16

它只是给我"重新声明延迟"。我如何改变这一点,如果延迟没有传递给doSay(text)的调用,延迟应该是1000,但如果它被称为doSay(text, 9000),它应该是9000?

这是我试过的,但是没有成功。

uint32_t delay = MINTICKS;
if (parameters > 1) {
    delay = std::max(delay, popNumber(L));
} else {
    uint32_t delay = 1000;
}

的代码
int PersonInterface::luaActionSay(lua_State* L)
{
    //doSay(text, <optional> delay)
    int32_t parameters = lua_gettop(L);
    uint32_t delay = MINTICKS;
    if (parameters > 1) {
        delay = std::max(delay, popNumber(L));
    }
    std::string msg(popString(L));
    ScriptEnviroment* env = getScriptEnv();
    Person* person = env->getPerson();
    if(person){
        person->doSay(msg, delay);
    }
    return 0;
}

要向函数传递默认参数,请在函数声明中使用以下语法:

void foo(int a, int b = 1000);
foo(42);       // calls foo(42, 1000);
foo(42, 9000); 

你可以有任意数量的默认参数,但不能在默认参数的右边有非默认参数,所以这是不合法的:

void foo(int a, int b = 1000, int c);

但这是

void foo(int a, int b = 1000, int c = 42);

对于您的重声明错误,请不要再声明delay:

} else {
  delay = 1000;
}

delay = (parameters > 1) ?
        std::max(delay, popNumber(L)) :
        1000;