{|_,e| e.length>1} Ruby 中下划线 (_) 有什么用?

2023-12-15

country =
  ["UK", "US", "RS", "EU", "UK", "US"].
    group_by{ |e| e }.
    keep_if{ |_, e | e.length > 1 }
#⇒ {"UK"=>["UK", "UK"], "US"=>["US", "US"]}

有什么用_(下划线)在第二个块中。有人可以详细解释一下吗?


这个问题在两个层面上有三个答案。

第一个答案是在 Ruby 语言层面:Ruby 中没有使用下划线。它没有任何意义。它只是一个合法标识符,就像任何其他合法标识符一样。它本来可以被命名为foo or bar相反,它不会以任何方式改变这段代码的含义。

第二个答案是在 Ruby 社区层面:在 Ruby 社区中,下划线用于与其他阅读代码的程序员进行交流“我需要在这里放置一个标识符,因为 Ruby 语言的规则强迫我这样做,但我我实际上对它不感兴趣,事实上我永远不会使用它。”所以,它对 Ruby 来说没有任何意义,但它does对 Ruby 有意义程序员。就像以结尾的方法一样! or ?:它们没有特殊含义,它们只是用于从一个 Ruby 程序员向另一个程序员传达意图。

第三个答案同样是在 Ruby 语言层面:由于 #2,Ruby 1.9+ 中进行了两项更改,将下划线的使用编码为“忽略我”标识符:

  1. 通常,未使用的局部变量会生成警告。未使用的以下划线开头的局部变量,或者只是简单命名_不生成警告。
  2. 通常,标识符在参数列表中只能使用一次。以下划线开头或简单命名的标识符_可以多次使用。

See:

#!/usr/bin/ruby -w

foo = nil
bar = nil
baz = nil

Running:

./test.rb
./test.rb:3: warning: assigned but unused variable - foo
./test.rb:4: warning: assigned but unused variable - bar
./test.rb:5: warning: assigned but unused variable - baz

But:

#!/usr/bin/ruby -w

_foo = nil
_bar = nil
_    = nil

Running:

./test.rb

And:

#!/usr/bin/ruby -w

def foo(bar, bar) end

Running:

./test.rb
./test.rb:3: duplicated argument name
def foo(bar, bar); end

[第二bar在控制台中带有下划线,这里很难重现。]

But:

#!/usr/bin/ruby -w

def foo(_bar, _bar) end

Running:

./test.rb

因此,有下划线和无下划线之间的唯一区别是,下划线会关闭某些错误和警告,这与 Ruby 社区中的常见用法一致。

该约定通常也受到 linter、静态分析器、编辑器和提供 Ruby 代码语义分析的 IDE 的遵守,例如对于名称以 或 开头的变量,IDE 不会突出显示并警告未使用的变量。_.

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

{|_,e| e.length>1} Ruby 中下划线 (_) 有什么用? 的相关文章

随机推荐

  • 如何将 CreateObject("Wscript.shell") 转换为 C# [重复]

    这个问题在这里已经有答案了 我怎样才能用 C 翻译这个 Set WshShell WScript CreateObject WScript Shell 谢谢 这个用在什么场合呢 还有我必须在 C 中包含什么库才能工作 使用用于脚本编写的 S
  • 如何在 iPhone 的图像上添加文字?

    我需要在 iPhone 中将文本放在图像上 它就像 Eurosport iPhone 应用程序 source mzstatic com 以同样的方式 我需要在我的应用程序中添加文本 我怎样才能做到这一点 Thanks 我找到了两种方法 1
  • 我可以使用 WinApi Deploy Cmd 在电脑上安装、更新吗

    我的 appx 文件安装在文件夹中 我可以通过双击该文件来安装它 但我正在寻找一种使用 WinAppDeployCmd 进行安装和更新过程来安装它的方法 WinAppDeployCmd install file C release file
  • Hadoop:JPS 找不到已安装的 Java

    我的配置是 hduser worker1 usr local hadoop conf jps The program jps can be found in the following packages openjdk 6 jdk open
  • 如何使用外部 JSON...?

    花了几个小时试图解决这个问题 但我无法弄清楚出了什么问题 我想做的就是加载这个 https recruit zoho com ats EmbedResult hr jodigest 2cV Sr2As6VxhLMxQGuTNij g Fb3
  • 通过 cron 执行的 Google Cloud SDK 代码

    我正在尝试实现一个自动代码来通过 Crontab 关闭和启动我的 Google Cloud 帐户中的 VM 实例 操作系统是 Ubuntu 12 lts 并安装了 Google 服务帐户 因此它可以处理我的 Google 云帐户上的读 写
  • 如何使用tensorflow进行文本分类?

    我是张量流和机器学习的新手 我在编写张量流代码时遇到问题 该代码的文本分类类似于我尝试使用 sklearn 库进行的文本分类 我在对数据集进行矢量化并向张量流层提供输入方面面临着重大问题 我确实记得对标签进行了一次热编码 但前面的张量流层不
  • Twitter 模块 python 'module' 对象没有属性 Oauth

    我正在尝试遵循这个基本示例here Code import twitter XXX Go to http dev twitter com apps new to create an app and get values for these
  • 随机化神经网络输入顺序的影响

    在我的高级算法和数据结构课程中 我的教授要求我们选择任何我们感兴趣的主题 他还告诉我们要研究它并尝试实施解决方案 我选择神经网络是因为它是我长期以来想学习的东西 我已经能够使用神经网络实现 AND OR 和 XOR 该神经网络的神经元使用阶
  • 共享变量的过时值

    在阅读实践中的并发性时 我读到 NoVisibility展示了一种不充分的方法 同步程序可能会导致令人惊讶的结果 陈旧的数据 当 的时候 读者线程检查ready 它可能会看到一个过时的值 除非 每次访问变量时都会使用同步 这是 可能会看到该
  • 分离数据框列中的值并融化

    我有一个数据框 我想在其中分隔 Client ID 列中的值并融化 因此每一行都包含一个 Client ID 以及相应的 Account Name 和所有者 gt head df Account Owner Account Name Cli
  • C++ 将带有分隔符的文本文件读取到结构数组中

    我正在尝试从格式类似于此的文本文件中读取数据 knife object 0 bag object 15 kitchen room 400 放入由结构体组成的数组中 这是我到目前为止所拥有的 但它只读取第一个元素然后返回垃圾 include
  • 提供 SOAP/XML + REST/JSON 的最佳方式是什么?

    我正在创建一个通用 Web 服务 该服务可能有许多不同的客户端 其中一些我目前无法预料 我已经有了一个很好的 Java 服务 API 并且希望在此基础上提供一个 Web 服务外观 SOAP 与 REST 争论的双方都有很大的争论 这让我想知
  • 数组中的随机数而不连续两次重复相同的数字?

    我正在使用 Swift 和 SpriteKit 制作一个游戏 其中我根据数组将对象移动到随机位置 由 CGPoints 组成的数组 let easyArray CGPointMake 0 0 CGPointMake 126 6 0 CGPo
  • 如何从基于年份的大数据集中获取多个矩阵

    在我开始之前 这里是我正在处理的数据的一小部分 我提前为它太大而道歉 注意这只是一个非常大的数据集的前 30 行 mydata lt structure list ParkName c SEP CSSP SEP ONF SEP ONF SE
  • 为什么Object类的方法可以在接口中使用?

    以下接口和类已成功编译 下面的输出中提到了问题 interface MyInterface class MyClass implements MyInterface class InterDoubt static MyInterface m
  • 有条件导入《盖茨比》中的图书馆

    我正在尝试这样做 if typeof window undefined import Keyboard from react simple keyboard import react simple keyboard build css in
  • 如何生成静态链接的可执行文件?

    我正在尝试使用 Rust 创建一个静态可执行文件 我是not尝试静态链接特定库 我试图创建一个可执行文件根本不使用动态链接 我有以下 否则有效 测试 cat hello rs fn main print Hello world n rust
  • mysql_num_rows():提供的参数不是有效的 MySQL 结果资源[重复]

    这个问题在这里已经有答案了 if mysql num rows result echo no match found 它抛出一个错误 Warning mysql num rows supplied argument is not a val
  • {|_,e| e.length>1} Ruby 中下划线 (_) 有什么用?

    country UK US RS EU UK US group by e e keep if e e length gt 1 UK gt UK UK US gt US US 有什么用 下划线 在第二个块中 有人可以详细解释一下吗 这个问题在