Я удивлен, что все это время никто не цитировал Аннотированное справочное руководство C ++ ( ARM ), он говорит следующее о [dcl.init] с акцентом my:
Очевидно, слишком много обозначений для инициализаций, но каждый, кажется, хорошо подходит к определенному стилю использования. Обозначение = {initializer_list, opt} было унаследовано от C и хорошо служит для инициализации структур данных и массивов. [...]
blockquote>, хотя грамматика развилась с тех пор, как было написано ARM , происхождение остается.
, и мы можем перейти к Обоснование C99 , чтобы понять, почему это было разрешено в C, и он говорит:
K & amp; R допускает конечную запятую в инициализаторе в конце списка инициализаторов. Стандарт сохранил этот синтаксис, поскольку он обеспечивает гибкость при добавлении или удалении членов из списка инициализаторов и упрощает создание таких списков.
blockquote>
Вы сбрасываете значение i
обратно на ноль каждый раз, когда срабатывает обратный вызов вашего сообщения. Вместо этого вы можете объявить i
как глобальную переменную, а затем увеличить ее в своем операторе if следующим образом:
var i = 0; // declare outside (to avoid resetting it)
client.on('message', msg => {
if (msg.content === 'ping') {
msg.reply('Pong!')
}
if (msg.content === '+1') {
msg.reply("Counter: " +i)
i++; // increment the value of i (same as i = i + 1)
}
})
Есть много способов сделать это. Вот несколько примеров.
1.
if (msg.content === '+1') {
i = i + 1
msg.reply("Counter: " +i)
}
2.
if (msg.content === '+1') {
i++
msg.reply("Counter: " +i)
}
3.
if (msg.content === '+1') {
++i
msg.reply("Counter: " +i)
}