Freecodecamp: 注释的代码被认为是用于代码验证的,而不仅仅是注释!

创建于 2017-05-31  ·  15评论  ·  资料来源: freeCodeCamp/freeCodeCamp



[使用对象进行查找]


挑战的链接:
https://www.freecodecamp.com/challenges/using-objects-for-lookups

问题说明


在这个挑战中,我不得不产生switch语句的对象版本。 我必须记住switch_的每个_'case'成员来生成对象版本,因此我注释掉了整个switch部分,然后重新键入了正确的对象版本。
不过,我无法通过考试。
这是由于对
You should not use case, switch, or if statements

在注释掉开关的过程中,它不应验证_switch_的用法,而应将其视为注释。

浏览器信息

  • 浏览器名称,版本:Google Chrome
  • 作业系统:Windows 10
  • 移动设备,台式机或平板电脑:台式机

您的密码

// Setup
function phoneticLookup(val) {
  var result = "";

  // Only change code below this line
   var lookup = {
    "alpha":"Adams",
    "bravo":"Boston",
    "charlie":"Chicago",
    "delta":"Denver",
    "echo":"Easy",
    "foxtrot":"Frank"
    };

  result = lookup[val];

  /*
  switch(val) {
    case "alpha": 
      result = "Adams";
      break;
    case "bravo": 
      result = "Boston";
      break;
    case "charlie": 
      result = "Chicago";
      break;
    case "delta": 
      result = "Denver";
      break;
    case "echo": 
      result = "Easy";
      break;
    case "foxtrot": 
      result = "Frank";
  }
*/
  // Only change code above this line
  return result;
}

// Change this value to test
phoneticLookup("charlie");



屏幕截图

freecodecamp

help wanted blocked on the roadmap bug

最有用的评论

@ Saif-Shines是的,我们知道这是主网站上的现有问题,并且如果您愿意,我们确实缺乏基础架构来拥有严格的解析器。

当前唯一的方法是删除注释。

所有15条评论

@ Saif-Shines是的,我们知道这是主网站上的现有问题,并且如果您愿意,我们确实缺乏基础架构来拥有严格的解析器。

当前唯一的方法是删除注释。

潜在的贡献者,这需要在这里进行调查:
https://github.com/freeCodeCamp/freeCodeCamp/blob/staging/client/rechallenge/throwers.js#L16

/ cc @BerkeleyTrue

关于Basic Javascript的第一个挑战,我在尝试评论时遇到了类似的问题:

// Use comments only when they are actually needed

/* Sometimes, using descriptive names for variables and functions is way better 
than leaving code smell all over your code */

在这种情况下,因为在我的第二条评论中,我使用了“功能”一词,所以会抛出:
Error: SyntaxError: Unsafe or unfinished function declaration

也许为contents.replace(/\/\*[\s\S]*\*\/|\/\/[^\n]*/gi,''))而不是contents运行测试可以解决该问题? (表示一般问题,因为在我看来,由于替换注释后内容为空,因此该特定测试仍然会失败)

我们不能做这样的事情:
Node node = nodeList.item(i); if(node.getNodeType() == Node.COMMENT_NODE) { continue; } else { //do something }

我想承担这个。

我对这个问题很感兴趣,可以将它分配给我,又可以将我定向到需要更改的文件吗?

由于超过一个星期没有更新,因此我将继续处理。 希望你们一切都好@ Survivor75@ knrt10

@raisedadead :我相信解决方案比我们一直想的要简单得多。

我们在code上运行断言,它是一个字符串。 那么,为什么不在此字符串上运行正则表达式并删除注释,然后再将其用于验证呢?

例如,在- client/frame-runner.js ,我们获取codemirror编辑器的内容,例如

const editor = { getValue() { return source; } };
const code = source;

与其直接按原样传递代码,不如运行正则表达式以消除诸如

const editor = { getValue() { return source; } };
const code = source.replace(/\/\*[\s\S]*?\*\/|[^\S]\/\/.*$/gm, '');

这样,测试运行程序就永远不会收到代码中的注释,一切都很好。

我已经在这里验证了此正则表达式-http: //regexr.com/3ghvi

注意:

  • 这不考虑HTML注释,因为在开始时确实存在一些挑战,它们确实验证了HTML注释的存在。
  • 网址格式不包括在内。
  • 由于此正则表达式替换了导致//的字符,因此我们不会替换不存在于其行上的内联注释。

@adityaparab非常酷:+1
当我从事其他工作时,我几乎忘了它。
但是,我想出了这段代码,如果您要进行此工作,请查看以下功能。
function stripComments ( code ) { return code . replace (/\/\/.*|\/\*[^]*?\*\// g , "") ; }

这将删除所有注释的代码:)

不幸的是,这里唯一真正的解决方案是使用AST进行测试。 我已经与@QuincyLarson讨论了有关添加一个API的问题,该API公开了babel产生的JS AST,并添加了一个类似于eslint的插件接口的API。 这可能有点偏离,因为优先级是继续应对挑战,然后概括从文件中导入挑战本身的方式。

我刚遇到这个问题,并在评论中包含了“功能”一词...我真的很困惑,直到某个论坛的人解释了发生了什么。 希望这个问题能尽快解决! 也许应该向用户显示一些消息,警告他们有关挑战中的注释的解析器问题?

也可以看看:
https://forum.freecodecamp.org/t/javascript-tests-in-challenges-no-longer-working-correctly/190249

@SuperGeniusZeb感谢您报告此情况,并确认重现此步骤。

由于这个问题最近一直没有解决,因此我将其过时的关闭。 如果您认为这仍然与新更新的平台有关,请说明原因,然后重新打开它。

@昆西·拉森

在更新的站点中,挑战测试仍将注释错误地理解为代码。 以这个挑战为例:

https://learn.freecodecamp.org/response-web-design/css-grid/create-a-column-gap-using-grid-column-gap

使用以下代码,即使grid-column-gap: 20px在注释中,我也可以通过测试(检查grid-column-gap是否设置为20px )。

<style>
  .d1{background:LightSkyBlue;}
  .d2{background:LightSalmon;}
  .d3{background:PaleTurquoise;}
  .d4{background:LightPink;}
  .d5{background:PaleGreen;}

  .container {
    font-size: 40px;
    min-height: 300px;
    width: 100%;
    background: LightGray;
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 1fr 1fr 1fr;
    /* add your code below this line */
    grid-column-gap: 10px;
    // grid-column-gap: 20px;
    /* add your code above this line */
  }
</style>

<div class="container">
  <div class="d1">1</div>
  <div class="d2">2</div>
  <div class="d3">3</div>
  <div class="d4">4</div>
  <div class="d5">5</div>
</div>

请重新打开此问题。

@SuperGeniusZeb您能在https://github.com/freeCodeCamp/learn/issues打开新期刊吗? 非常感谢。

@raisedadead我刚刚在那里创建了一个新期刊:
https://github.com/freeCodeCamp/learn/issues/165

此页面是否有帮助?
0 / 5 - 0 等级