在 Ruby 中使用数组联合运算符 |= 时,为什么必须在访问器上显式调用 self?

2023-12-01

以这个类为例:

 class MyClass
  attr_accessor :values, :uniq_values

  def initialize(value)
    self.uniq_values = ['default_value']
    self.values = ['default_value']
    copy_value(value)
    add_value(value)
  end

  def copy_value(value)
    uniq_values |= [value]
  end

  def add_value(value)
    values << value
  end

  def run
    puts "uniq_values: #{uniq_values}"
    puts "values: #{values}"
  end
end

obj = MyClass.new('poop')
obj.run

# Expect 'uniq_values' and 'values' to be the same
# OUTPUT:
#  uniq_values: ["default_value"]
#  values: ["default_value", "poop"]

我可以通过使用获得所需的输出self.uniq_values |= [value],但是我希望有必要<<运营商也是如此。谁能解释其中的区别吗?


这不一样。

values << value是方法调用,它调用的方法:<<的数组。

While uniq_values |= value只是捷径uniq_values = uniq_values | value, here uniq_values将被解析为局部变量。

Per the 文档:

“当解析器遇到 分配,而不是分配发生时”

and

“使用方法分配时,您必须始终有一个接收器。如果您 没有接收者 Ruby 假定您正在分配给本地 多变的”

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

在 Ruby 中使用数组联合运算符 |= 时,为什么必须在访问器上显式调用 self? 的相关文章

随机推荐

  • 在 KAFKA 中最大轮询间隔之前发布新事件后,滞后偏移被跳过

    Kafka v2 4 消费者配置 kafka consumer auto offset reset earliest kafka consumer auto commit false Kafka 消费者容器配置 Bean public Co
  • Julia 并行性:@distributed (+) 比串行慢?

    在互联网上看到一些关于 Julia 并行性的教程后 我决定实现一个小的并行片段来计算调和级数 序列号为 harmonic function n Int64 x 0 for i in n 1 1 summing backwards to av
  • Firebase Firestore 易于记住的参考资料

    我们使用 Firebase Firestore 进行数据存储 当用户创建新房间时 我们希望引用易于记住 以便用户可以与其他用户共享房间 ID 代码 目前 Firestore 将创建一个唯一的引用 例如 DvfTMYED5cWdo5qIraZ
  • NHibernate - 通过不同的键多次 JOIN 到同一个表

    另一个 NHibernate JOIN 问题 我正在尝试通过不同的两个表连接一个表中的两个不同的属性 键 但我无法获得第二个 JOIN 属性 简化示例 我的课 namespace Domain public class Message re
  • 谷歌分析。增强的电子商务。产品展示次数限制

    有人知道增强型电子商务 Google Analytics 发送展示数据的限制吗 我发现奇怪的行为 谷歌限制发送超过 8KB 的数据 我使用数据层来发送电子商务数据 我的页面上有多达 100 个产品 我还使用 unicode 发送产品和类别名
  • 当子文档或集合完成创建时,不会触发 firestore OnCreate

    因此 我正在使用 flutter 和 firebase 构建一个聊天应用程序 每当两个新用户第一次开始互相聊天时 每当其中一个用户发送第一条消息时 我需要触发一个功能 这样我就可以将该信息存储在某处以显示稍后将其作为聊天记录提供给用户 曾经
  • 我不明白Oracle文档中的这一部分?

    你好 我是 Ankur 已经用 java 编码好几年了 我之前读过 Herbert Schildt 的 Head First Java The Complete Reference 最近我在这页中遇到了一个重大谬误 甲骨文文档注意部分说 如
  • 在react-native-pager-view(或任何其他)内动态更改内容

    我正在开发一个项目 我将在寻呼机视图中逐页显示某本书的详细信息和信息作为页面组件 该书包含 500 多个页面 所以我不能只创建 500 个页面组件 例如并将它们插入到寻呼机中 我想的是我可以获得一个特定的页面 仅在上一页和下一页旁边呈现其组
  • 画布不渲染以前的图像

    我有一个 asp net 网络应用程序 我使用 Web 套接字和 HTML5 canvas 将图像渲染到我的网页 这是 JS function setUpImageProc desktopImage onload function ctxL
  • WebKit 边框半径和过渡错误

    在 Google Chrome 的最新稳定版本 版本 31 0 1650 63 m 也包括 Canary 中 当涉及边框半径和过渡时 仍然存在错误 应用了边框半径的元素内的内容在动画结束之前不会被剪切 我已经设法通过转换 顶部 和 左侧 属
  • Chrome 在哪里存储 cookie?

    假设我使用以下命令设置了 cookiesetcookie 函数于PHP setcookie name foo false false 我可以在以下位置看到它 chrome settings cookies 但是 我找不到硬盘上存储的实际文件
  • PDFMiner 无法提取字体

    我正在使用 PDFMiner 将一些 pdf 报告转换为纯文本 并且我的一堆输入 pdf 只是输出了几行可识别的行 然后是一个 cid d 列表 有点像这样 检查报告 用户ID 4 用户ID 5 用户ID 6 用户ID 7 用户ID 8 用
  • 来自本地文件系统的 jQuery Ajax 请求(Windows file:///)

    我正在尝试执行 ajax 请求来获取内容 http localhost 在 Windows Wamp 服务器上运行 该脚本是从这样的地方运行的 file C my path index html 我只是使用标准 ajax 请求来尝试获取 l
  • 无法将正则表达式与 sed 匹配

    我正在尝试匹配一个模式 d x d x d x with sed没有运气 我正在运行的文件是这样的 name something version 0 0 1 description some desc main gulpfile js di
  • 如何在单选按钮组的 *ngFor 中设置最初选定的单选按钮

    Before我使用表单验证一切正常 我的单选按钮组 html 如下所示 div class form group row div
  • Pyglet 的 FPS 是显示器刷新率的一半

    我是 Pyglet 的新手 我编写了一个小程序 可以在屏幕上移动一个球 现在我很难建立 60 fps 的稳定帧速率 虽然 Pyglet 应该与我的显示器的 60Hz 刷新率同步 但 Pyglet 将我的 fps 设置为刷新率的一半 例如 当
  • 将 SSIS 包作为 SQLAgent 作业执行

    我有一个 SQL Server 2008 SSIS 作业 它执行一些 Win 32 exe 文件 当我通过 BIDS 在 Windows 2008 机器上 执行作业时 该作业运行良好 现在我已将包部署在 MSDB 数据库中 并尝试将包作为
  • Prolog算术语法

    如何定义a作为整数 浮点数 我想找到以下结果a b c d 10 where a b c d是整数并且 gt 0 这是一个简单 现代 纯 Prolog 非 CLP 库的解决方案 range X member X 0 1 2 3 4 5 6
  • 对 有效吗?

    以下是有效的 HTML 吗 我特别想知道的是
  • 在 Ruby 中使用数组联合运算符 |= 时,为什么必须在访问器上显式调用 self?

    以这个类为例 class MyClass attr accessor values uniq values def initialize value self uniq values default value self values de