【问题标题】:Switch only executes if it has one caseSwitch 仅在有一种情况时执行
【发布时间】:2021-04-19 01:49:14
【问题描述】:

我正在编写一个回复特定命令组的机器人。为此,我打算使用 Switch 条件,它在我的第一次部署中完美运行。

bot.on("message", function(message) {
  

  if(!message.content.startsWith(prefix)) return;
  message.content = message.content.toLowerCase();
  let args = message.content.substring(prefix.length).split(" ");
  
  switch(args[0]){
    
    case "salecs":

      let dt = new Date();
      let hr = dt.getHours();
      let min = dt.getMinutes();
      if (min < 10) {
        hr = hr*10
      }
      let tie = `${hr}${min}`;
      let ti = parseInt(tie);

      if (ti < 1729 && ti > 1529) {
        message.reply('https://es.wikipedia.org/wiki/Almuerzo');
      }else if (ti < 44 || ti > 2259) {
          message.reply('https://es.wikipedia.org/wiki/Cena');
      }else 
        message.channel.send('Salen esos tiritos?  \n@everyone');
    
    break;
  }  
});

但是当我尝试输入新案例时,它停止了工作。它不仅不执行新的案例,它也没有原来的工作。

bot.on("message", function(message) {
  

  if(!message.content.startsWith(prefix)) return;
  message.content = message.content.toLowerCase();
  let args = message.content.substring(prefix.length).split(" ");
  
  switch(args[0]){
    
    case "salecs":

      let dt = new Date();
      let hr = dt.getHours();
      let min = dt.getMinutes();
      if (min < 10) {
        hr = hr*10
      }
      let tie = `${hr}${min}`;
      let ti = parseInt(tie);

      if (ti < 1729 && ti > 1529) {
        message.reply('https://es.wikipedia.org/wiki/Almuerzo');
      }else if (ti < 44 || ti > 2259) {
          message.reply('https://es.wikipedia.org/wiki/Cena');
      }else 
        message.channel.send('Salen esos tiritos?  \n@everyone');
    
    break;

    case "salelol":

      let dt = new Date();
      let hr = dt.getHours();
      let min = dt.getMinutes();
      if (min < 10) {
        hr = hr*10
      }

      let tie = `${hr}${min}`;
      let ti = parseInt(tie);

      if (ti < 1729 && ti > 1529) {
        message.reply('https://es.wikipedia.org/wiki/Almuerzo');
      }else if (ti < 44 || ti > 2259) {
        message.reply('https://es.wikipedia.org/wiki/Cena');
      }else 
        message.channel.send('Salen esos locitos?  \n@everyone');

    break;
    
    default:

      message.reply('No lo tengo ese comando, rey.');

    break;
  }  
});

我一直在寻找错误,但我找不到哪里出错了,我希望这里的人能够发现并纠正我。

【问题讨论】:

  • 你能不能从 switch 改为 if..else if()...else。我认为处理特定情况更容易。

标签: javascript node.js heroku discord.js


【解决方案1】:

这似乎是因为您在同一范围内重复声明变量。我在您的“多个开关案例”示例中遇到错误,它说“dt”已被声明。您不用在 case 中声明变量,而是在 switch 语句本身中声明它们。

我建议在 case 之外(仍在 switch 语句中)声明 dt、hr、min、tie 和 ti,并且只声明一次。

【讨论】:

  • 也可以wrap some brackets围绕case语句:case "foo": { const bar = "baz"; break; }
  • 谢谢!就是这样,现在我可以随心所欲地使用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
相关资源
最近更新 更多