Ruby Koans:为什么将符号列表转换为字符串

2024-02-27

我指的是 Ruby Koans 中 about_symbols.rb 中的这个测试https://github.com/edgecase/ruby_koans/blob/master/src/about_symbols.rb#L26 https://github.com/edgecase/ruby_koans/blob/master/src/about_symbols.rb#L26

def test_method_names_become_symbols
  symbols_as_strings = Symbol.all_symbols.map { |x| x.to_s }
  assert_equal true, symbols_as_strings.include?("test_method_names_become_symbols")
end


  # THINK ABOUT IT:
  #
  # Why do we convert the list of symbols to strings and then compare
  # against the string value rather than against symbols?

为什么我们必须首先将该列表转换为字符串?


这与符号的工作方式有关。对于每个符号,只有其中一个实际存在。在幕后,符号只是一个由名称(以冒号开头)引用的数字。因此,当比较两个符号的相等性时,您正在比较对象标识和not引用该符号的标识符的内容。

如果你要做简单的测试:测试==“测试”,这将是错误的。因此,如果要将迄今为止定义的所有符号收集到一个数组中,则需要先将它们转换为字符串,然后再进行比较。您不能以相反的方式执行此操作(首先将要比较的字符串转换为符号),因为这样做会创建该符号的单个实例,并用您正在测试是否存在的符号“污染”您的列表。

这有点奇怪,因为您必须测试符号是否存在,而不能在测试过程中意外创建该符号。您通常不会看到这样的代码。

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

Ruby Koans:为什么将符号列表转换为字符串 的相关文章

随机推荐

  • 有效地计算组合和排列

    我有一些代码来计算排列和组合 并且我正在努力使其更好地处理大量数字 我找到了一种更好的排列算法 可以避免大量的中间结果 但我仍然认为我可以在组合方面做得更好 到目前为止 我已经提出了一个特殊情况来反映 nCr 的对称性 但我仍然希望找到一种
  • WHERE col IN 以空数组作为参数的查询

    从例子where col in 示例 https github com vitaly t pg promise wiki Learn by Example where col in values and 这个答案 https stackov
  • 初始化的数组是否保留其顺序?

    假设我初始化一个数组有点像这样 int anArray 100 200 300 400 500 600 700 800 900 1000 是否保证元素始终按照我在初始化时输入的顺序插入 例如 100 200 300 400 500 600
  • Android Play 计费库:获取产品介绍价格?

    我正在研究使用新的播放计费库 https developer android com google play billing billing library html 我关心的一件事是产品介绍价格 我想知道是否有办法检索新图书馆的介绍价格
  • 如何将多个 gsoap 客户端 Web 服务编译为一个可执行文件?

    I using gSOAP对于网络服务 但我有一个问题必须 将 2 个 Web 服务编译成一个可执行文件 还有一些 函数具有相同的名称 而不是使用参数 函数名称的其他前缀 编译错误 X o In function soap get stri
  • C 中的文件结束符 - EOF

    你输入什么来结束程序 1 不起作用 include
  • 在 Google 可视化中单击按钮后绘制图表

    我试图弄清楚如何在单击按钮后绘制图表 我的代码似乎有问题 我使用 Google 可视化和 Javascript 来完成此活动 有人可以看一下吗 CODE
  • 使用 jQuery .attr 或 .prop 设置属性值不起作用

    我创建了一个按钮 其属性名为 loaded 初始值为 no 单击按钮后 我正在运行一些 ajax 并在最后尝试将 已加载 属性设置为 是 以便如果用户多次单击该按钮 ajax 就不会再次运行 我有这样的事情 http jsfiddle ne
  • 滚动条在 WebView 的

    我有包含滚动分区的 Html 文件 当我在 WebView 中添加此 HTML 时 它不会显示该 div 的滚动条 我在 Html 文件中有代码 some Html code table style border 3px solid bla
  • Xcode4 与 Mac OS X 10.4 SDK

    在 Xcode 的最新版本 Xcode 4 0 中 不再包含 10 4 SDK 但是 我仍然需要支持 10 4 和 PowerPC 版本 我已经安装了最新的 Xcode 3 2 6 它仍然包含 10 4 支持 然后我安装了Xcode4 有没
  • 使用 C# 向 USB 连接的 GPRS 调制解调器发送 AT 命令

    任何人都可以给我一个关于如何访问连接到 USB 端口的 GPRS 调制解调器的良好指示或指南 我应该为我的程序制作一个 USB 驱动程序以将 AT 命令发送到调制解调器吗 或者就像一个路由器 我可以使用IP地址访问它 谢谢 如果 Windo
  • JTable 计算正在使用的行数并返回该数字

    我正在做一个小项目 停车场表 它允许您添加 删除和搜索汽车 除此之外 它还意味着返回已经停放的汽车数量 我的问题是 如何编写一个代码来计算已使用的行数并返回正在使用的行数 大概通过按钮或通过标签自动更新 注意 抱歉造成混乱 import j
  • 如何检查命令是否可用或存在?

    我正在 Linux 上用 C 语言开发一个控制台应用程序 现在 它的可选部分 不是必需的 取决于可用的命令 二进制文件 如果我检查system 我越来越sh command not found作为不需要的输出 并将其检测为存在 那么我该如何
  • PasswordDeriveBytes 与 Rfc2898DeriveBytes,已过时但速度更快

    我正在开发基于从 SymmetricAlgorithm 继承的类 例如 TripleDes DES 等 的加密功能 基本上有两个选项可以为我的算法类生成一致的密钥和 IV PasswordDeriveBytes and Rfc2898Der
  • 无法在设备“emulator-5554”上安装 apk:超时

    我是 Android 开发新手 我尝试在此文件夹中运行 LunarLander 项目 根据示例创建新项目 C Program Files Android android sdk windows samples android 9 Lunar
  • 在 Android 10 上以编程方式断开 Wifi

    I use WifiNetworkSuggestion以编程方式将我的应用程序连接到我的热点 但是当我尝试以编程方式断开此连接时 我使用了removeNetworkSuggestions就像文档提到的那样 删除之前的部分或全部网络建议 由应
  • 在 PHP 中管理巨型数组

    我正在为某人对数百万条旧日志条目进行数据挖掘 并且真的想在这件事上使用 PHP 来呈现这些材料 并将它们轻松链接到现有的 PHP 系统 我在终端 OSX 10 8 的 PHP 5 4 4 中运行此代码 Settings ini set er
  • 如何在 R 中显式调用函数参数的默认值?

    如何告诉 R 使用函数参数的默认值 而无需 i 省略函数调用中的参数以及 ii 不知道默认值是什么 我知道我可以使用默认值mean in rnorm rnorm n 100 by omitting the argument or rnorm
  • 如何将 FormsAuthentication cookie 添加到 HttpClient HttpRequestMessage

    我试图通过调用 FormsAuthentication SetAuthCookie someUser false 来验证内部集成测试之后 我确实需要调用 WebAPI 并且不会收到未经授权的异常 因为我已经应用了授权属性 我正在使用此代码来
  • Ruby Koans:为什么将符号列表转换为字符串

    我指的是 Ruby Koans 中 about symbols rb 中的这个测试https github com edgecase ruby koans blob master src about symbols rb L26 https