它只是让我“延迟了”。如何改变这一点,以便如果延迟没有传递给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;
}
答案 0 :(得分:8)
要将默认参数传递给函数,请在函数声明中使用以下语法:
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;