【问题标题】:What is the purpose of Underscore.lua module in Lua?Lua 中 Underscore.lua 模块的作用是什么?
【发布时间】:2017-05-16 15:49:33
【问题描述】:

在一些源代码中,我看到了“Underscore.lua”模块的用法。

_ = require 'underscore'

描述如下:

Underscore.lua 是一个 Lua 库,提供了一组实用程序 处理迭代器、数组、表和函数的函数。 它的 api 和文档深受Underscore.js 的启发。 在 Lua 中使用下划线字符来丢弃变量是惯用的,因此您可以简单地将其分配给另一个变量名...

文档中提供的示例让我有点困惑。比如下面这个操作的目的是什么?

_ = require 'underscore'
_.each({1,2,3}, print)

1   1   {
  1 : 1
  2 : 2
  3 : 3
}
2   2   {
  1 : 1
  2 : 2
  3 : 3
}
3   3   {
  1 : 1
  2 : 2
  3 : 3
}

很明显,这个模块为迭代器、数组等提供了一些功能。但是当你可以使用比下划线更明显的任何其他字符时,为什么还要使用_?特别是当许多编辑没有突出显示它并且阅读起来非常麻烦时。我不太明白有什么大惊小怪的。

【问题讨论】:

  • 是的,Lua 允许 Morse 风格的编程:_.__:_(),因为下划线字符在 Lua 标识符中非常有效。

标签: lua


【解决方案1】:

但是,当您可以使用比下划线更明显的任何其他字符时,为什么还要使用 _?

*咳咳*:

深受 Underscore.js 的启发

因为那是 Underscore.js 使用的。

我相当怀疑下划线字符被准确地选择了因为它不是很明显。这些实用程序的重点是您可以在任何地方使用它们,它们是您对数据结构进行基本操作所需的日常用品。

因此,它们应该是语言中可用的标准函数,访问它们所需的语法最少。但是你不能只是将它们转储到全局表/命名空间/等中;这可能与现有代码冲突。因此,您可以为它们提供访问它们所需的绝对最低限度的语法。

【讨论】:

  • 在我的理解中,it's pretty idiomatic 使用下划线表示循环中被忽略的变量,例如for _,v in ipairs(t) do print(v) end。因此,下划线 IMO 在这里不是一个非常安全的选择。
  • @ThomasW:在 Lua 中可能就是这种情况,但下划线也是如此。 js.
  • 这当然是对的,但我们在这里讨论的是一个 Lua 模块,即使它被命名为“下划线”,我可能更喜欢以不同的名称加载它。
【解决方案2】:

如果你使用

your_favorite_variable = require 'underscore'

你可以使用

your_favorite_variable.each({1,2,3}, print)

但下划线(除了它与库和引用的javascript库同名)有几个优点:

  • 输入简单快速。因此在您需要时非常方便
  • 不可见。如果您想将其视为“标准”库的一部分,您不想让它可见

这是很常见的方法。类似的用于 jQuery 在 Javascript 中,它以同样的方式滥用$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2010-11-19
    • 2016-08-24
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多