for循环中的索引变量(_i)?

2023-12-01

看一下这个简单的代码:

eat = (x) -> console.log "nom", x

# dog only eats every second cat
feast = (cats) -> eat cat for cat in cats when _i % 2 == 0

feast ["tabby cat"
       "siamese cat"
       "norwegian forest cat"
       "feral cat"
       "american bobtail"
       "manx"]

$ coffee a.coffee 
nom tabby cat
nom norwegian forest cat
nom american bobtail

看来_i变量是当前索引。这是一个功能、错误还是 NaN?我没有听到其他人谈论过这个,所以我想知道是否有某种原因我不应该在我的代码中使用它?


tldr-再次; CoffeeScript的作者刚刚告诉我我是对的: 不要使用_i.

14:29 <jashkenas> You shouldn't use internal variables. 
...
14:42 <meagar> I was hoping something more deeply involved in the language would be able to put some authority behind that opinion 
14:43 <meagar> ... I was basically hoping for an authoritative "don't do that" 
14:44 <jashkenas> you just got it ;) 
14:44 <jashkenas> for item, index in list -- there's your reference to the index. 

太棒了;这是at best an 未记录的功能功能上等效的记录在案功能存在。因此,应该not使用。

你关于“减少打字”的论点是非常可疑的;比较:

for x in [1, 2, 3] when _i % 2 == 0
  console.log "#{_i} -> #{x}"

for x,i in [1, 2, 3] when i % 2 == 0
  console.log "#{i} -> #{x}"

功能、错误还是 NaN?

这些都不是;这是未定义的行为。你是assuming that _i将是编译后的 JavaScript 中用于迭代的变量。

你绝对不应该使用_i,或假设_i将被定义。这是一个实施细节,他们可以随时更改它。也是不会的be _i如果您的循环嵌套在另一个循环中;这将是_j or _k etc.

最重要的是,你可以做这件事without依赖于底层实现的 JavaSript 变量。如果你想用索引循环,只需使用for value,key in array:

array = ['a', 'b', 'c']

console.log(index) for item, index in array # 0, 1, 2

具体来说,在您的示例中:

feast = (cats) -> eat cat for cat, index in cats when index % 2 == 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

for循环中的索引变量(_i)? 的相关文章

随机推荐

  • 如何在div标签中动态加载aspx页面?

    大家好 我正在尝试将一个aspx页面的内容加载到另一个aspx页面的div标签中 我不想使用jquery 任何人都可以建议我服务器端解决方案 以便在单击按钮时动态加载 div 标签 提前致谢 只需获取页面本身并将其发送到控件 in HTML
  • 在linux下构建edk2

    我开始用 edk2 编写一个小而简单的应用程序 因此 要编写一个简单的 edk2 UEFI 应用程序 我是这样开始的 git克隆https github com tianocore edk2 git edksetup sh BaseTool
  • Asp.net 跨域表单发布

    是否可以将数据从一个域中的 ASP NET 应用程序发布到不同域中的另一个应用程序 我看过一些帖子 其中人们提到了一些相当奇怪的方法将表单注入到响应流中 但这似乎有点矫枉过正 是否有可能 以及在不破坏 Asp net 的情况下实现这一目标的
  • 如何使用 powershell 将 vhd 复制到基于 RM 的订阅?

    我正在寻找 Powershell 脚本来使用资源管理器部署模型将 vhd 复制到订阅 vhd 存储在 Azure 存储页 blob 中 存储 API 的工作方式独立于帐户的创建方式 经典与 ARM 它甚至独立于订阅 您只需要存储帐户的名称和
  • 复选框仅适用于 jQuery 数据表中的当前分页页面

    我正在使用 jquery 数据表列出我的内容 其中具有复选框选择和选定的内容发布数据 但在提交的表单中仅发送当前页面数据 我的数据表代码是 select dataTable order 2 desc lengthMenu 50 1 50 A
  • 更改检查映射键是否相等的方式

    我有以下代码 class KeyClass int property KeyClass this property void main KeyClass kc1 KeyClass 1 KeyClass kc2 KeyClass 2 Map
  • 字节顺序——为什么字符要向后放入 Int16 打印?

    以下 C 代码在 XCode 中编译并运行 UInt16 chars ab printf nchars 2 2s char chars 打印 ba 而不是 ab Why 该特定实现似乎以小端格式存储多字符常量 在常数 ab 人物 b 是最低
  • 通过从 C/C++ 替换 R 控制台中的输出来创建进度更新

    是否可以使用 R 的 C C 打印函数覆盖 R 控制台输出 Rcpp sourceCpp code include
  • 检测 strtol 故障[重复]

    这个问题在这里已经有答案了 如何检测 strtol 是否未转换数字 我在下面的简单情况下测试了它 它输出了 0 现在明显的问题是如何区分非转换和转换 0 long int li1 li1 strtol some string with no
  • PHP POST 数组为空和 isset [重复]

    这个问题在这里已经有答案了 我有以下多个复选框选择
  • 在动态 .htaccess 处添加尾部斜杠

    我有一个很大的网站 htaccess有很多动态规则 一切都工作正常 但不幸的是 谷歌正在复制我的网址 考虑到相同的网址带有尾部斜杠并且没有 我将粘贴我的代码 htaccess如果有人可以帮助我强制添加尾部斜杠 而不生成 301 循环 Opt
  • 滑动视图寻呼机时显示工具栏。 [协调器布局]

    在我的应用程序中 我使用带有 3 个片段的 viewpager 其中两个我有reuclerviews 我利用了新的协调器布局 并在回收器视图上滚动时使工具栏隐藏 显示 我的问题如下假设用户正在片段 A 中的 recyclerview 列表上
  • 将月份添加到日期时刻 js

    我正在尝试使用 js 将月份添加到给定日期 fd start date 有开始日期 但 moment js 返回 无效日期 我正在使用日期选择器以 YYYY MM DD 格式选择日期 fd start date click function
  • Java Spring WebFlux 中从 REST 控制器返回(大)文件的正确反应模式是什么?

    情况 我有一个非反应式遗留库 它需要OutputStream并将其输出写入其中 方法签名类似于void produceData OutputStream stream 我想通过 Web 服务将方法的输出公开为 PDF 文件 文件有时可能非常
  • 为什么某些 Matlab 类方法需要“显然”不必要的输出参数 [重复]

    这个问题在这里已经有答案了 在改进我的项目代码几个月后 我终于需要定义一个新类 必须翻阅以前的类定义来刷新约定 我注意到所有构造函数和属性设置器都有一个输出参数 即使没有为其分配任何内容 例如 function o myConstructo
  • 如何在 Visual Studio 2015 中禁用 PDB 文件创建?

    IDE 我使用 Visual Studio 2015 Update 3 语言 C NET 4 5 Issue 当我编译发布解决方案时 会生成 PDB 文件 问题 如何在 Visual Studio 2015 中禁用 PDB 文件创建 在主菜
  • Cassandra 从 2.0.x 升级到 2.1.x 或 3.0.x

    我搜索过这个问题的以前版本 但似乎都不适合我的情况 我有一个运行 2 0 x 的现有 Cassandra 集群 我已分配了新的虚拟机 因此我不想升级现有的 Cassandra 节点 相反 我想迁移到 a 新虚拟机和 b 更新版本的 Cass
  • 为什么使用 pip 而不是 easy_install?

    A tweet reads 不要使用 easy install 除非你 就像在自己脸上捅刀一样 使用点 为什么使用 pip 而不是 easy install 难道不是错误主要在于 PyPI 和包作者 如果作者将垃圾源 tarball 例如
  • DateTime.ParseExact 抛出格式异常

    我有一个以下格式的日期 hh mm ss ffff dd MM yy 例如 20 58 54 5854 28 07 07 但是当我尝试解析该日期时对于 DateTime ParseExact 它会因格式异常而失败 我的确切代码行是 var
  • for循环中的索引变量(_i)?

    看一下这个简单的代码 eat x gt console log nom x dog only eats every second cat feast cats gt eat cat for cat in cats when i 2 0 fe