Ruby 类与结构

2024-03-05

我见过使用结构来包装类内的属性和行为的代码库。 Ruby 类和结构有什么区别?什么时候应该使用其中一种而不是另一种?


来自结构文档 http://www.ruby-doc.org/core-2.1.2/Struct.html:

Struct 是一种使用访问器方法将多个属性捆绑在一起的便捷方法,而无需编写显式类。

Struct 类生成新的子类,其中包含一组成员及其值。对于每个成员,都会创建类似于 Module#attr_accessor 的读取器和写入器方法。

所以,如果我想要一个Person我可以访问名称属性(读和写)的类,我可以通过声明一个类来实现:

class Person
  attr_accessor :name

  def initalize(name)
    @name = name
  end
end

或使用结构:

Person = Struct.new(:name)

在这两种情况下,我都可以运行以下代码:

 person = Person.new
 person.name = "Name"
 #or Person.new("Name")
 puts person.name

什么时候用?

正如描述所述,当我们需要一组可访问的属性而不必编写显式类时,我们可以使用结构。

例如,我想要一个点变量来保存 X 和 Y 值:

point = Struct.new(:x, :y).new(20,30)
point.x #=> 20

更多示例:

  • http://blog.steveklabnik.com/posts/2012-09-01-random-ruby-tricks--struct-new http://blog.steveklabnik.com/posts/2012-09-01-random-ruby-tricks--struct-new
  • "在 Ruby 中何时使用 Struct 而不是 Hash? https://stackoverflow.com/questions/3275594/when-to-use-struct-instead-of-hash-in-ruby”也有一些非常好的点(与使用哈希相比)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 类与结构 的相关文章

随机推荐

  • 使用 rvest 抓取带有 span 的 html 表

    我正在使用 rvest 提取以下页面中的表 https en wikipedia org wiki List of United States presidential elections by popular vote margin ht
  • 动态 Servicefabric 设置和覆盖

    有没有办法完全不告诉服务有关设置 而只在应用程序级别提供它们 我仍然对 servicefabric 配置的工作方式不满意 据我所知 我必须在服务的 settings xml 中指定所有可能的配置值 然后我可以覆盖应用程序的 Applicat
  • elasticsearch:将“应该”变成过滤器

    我想使用过滤器进行搜索 排除与条件或另一个条件不匹配的结果 我尝试在过滤器中执行 应该 操作 但失败了 POST my index search query bool filter should match type1 title sear
  • 为什么抽象方法有时需要重写?

    基于一个上一个问题 https stackoverflow com questions 66182368 stack modification traits in scala not working 下面的代码编译OK trait Logg
  • 打开数据库图表后 SQL Server Management Studio 崩溃

    我在 SQL Server 2018 SSMS 18 1 的本地服务器中有 2 个现有数据库图 打开它时 应用程序变得 无响应 然后崩溃 没有任何错误 过去 7 天运行良好 意思是 18 如果您安装了 SSMS 版本 18 0 则数据库图已
  • Facebook 延迟深度链接在 iOS 上不起作用

    当我使用 Facebook 时一切正常应用广告助手 https developers facebook com tools app ads helper 深度链接测试器 应用程序将从 App Store 下载 URL 将被正确获取和处理 但
  • 如何找到 MySQL root 密码

    我无法弄清楚我的 MySQL root 密码 我怎样才能找到这个 是否有存储此密码的文件 我正在关注这个但我本地没有 directadmin 目录 感谢 thusharaK 我可以在不知道旧密码的情况下重置root密码 在 ubuntu 上
  • 如何在使用 PhoneGap/Cordova 构建的 Android 应用程序中单击按钮时播放音频?

    我正在构建一个类似音板的基本应用程序 其中有一些播放声音的按钮 我正在使用 PhoneGap Cordova 并使用 PhoneGap Build 服务将代码编译为 APK 起初 我使用简单的 HTML5
  • 如何在 %width div 内保持图像长宽比?

    很抱歉再次询问这个问题 但我的搜索没有显示任何我能够实现的内容 我在 div 中有一个具有以下样式的图像 div class thumb grid 6 img src img test2 jpg alt flavin div grid 6
  • 本月第几周

    我正在尝试获取该月的周数 这就是我想要做的 x date V echo x is x y date V d date Y m01 echo y is y week of month x y echo week of month is wee
  • 最有效的不区分大小写的 grep 用法是什么?

    我的目标是匹配属于 Yahoo 的电子邮件地址 域家族 在 nix 系统 我将使用 Ubuntu 中 这些匹配模式的方法中的任何一种都有哪些优点和缺点 如果还有我无法想象的另一种更优雅的解决方案 请分享 他们来了 Use grep有选项 i
  • 异步通知 BlockingQueue 有可用项目

    我需要一个Object当某些情况时得到异步通知BlockingQueue有一件物品要赠送 我在 Javadoc 和网络上搜索了一个预制的解决方案 然后我最终得到了我的一个 也许是幼稚的 解决方案 如下 interface QueueWait
  • 将 Dropwizard JDBI 升级到 JDBI 3

    如何将 dropwizard jdbi 2 78 升级到 jdbi 版本 3 因为我想利用其中包含的联接功能 项目成员在此 我们将在 v3 最终版本之前发布更完整的迁移指南 与此同时 我们的一位用户刚刚提交了一份不错的更改列表作为起点 Se
  • CreateRef方法迁移到.Net Core导致404,如何使用.Net Core在OData中实现创建关系

    我有 2 个 POCO 教训和具有 int PK 的特征 我设置了导航属性 以便我可以成功 expand像这样 http localhost 54321 odata Lessons expand Traits http localhost
  • 在 ICollection> 上实现 .Contains() 的最简单方法

    假设我有一个Dictionary
  • 有没有API可以判断Android设备是否是双核?

    我正在通过多线程进行双核优化 它的工作原理如下 如果设备具有双核处理器 则创建两个线程进行计算 如果设备只有一核处理器 则仅创建一个线程进行计算 我的问题是 我的程序如何知道设备是否是双核 我只想有一个程序可以在双核和单核设备上运行 所以它
  • Laravel:在 if-else 条件内扩展不同的布局

    我试图在 if else 语句中扩展不同的布局 这是我的代码 if Auth check extends layouts adminPanel else extends layouts home endif 但视图文件扩展了两种布局 无论用
  • Jest 或 Mocha:基于异步初始化动态创建测试

    我试图通过循环异步调用返回的数组来动态生成测试 我只是不知道如何做到这一点 使用摩卡或使用笑话 为了说明如何使用代码 以下同步示例有效 describe Test using various frameworks gt mocha jest
  • 用户/组关系的 has_and_belongs_to_many 或 has_many ?

    我正在开发具有以下模型的 Rails 3 1 应用程序 User class User lt ActiveRecord Base has and belongs to many groups has many ownerships clas
  • Ruby 类与结构

    我见过使用结构来包装类内的属性和行为的代码库 Ruby 类和结构有什么区别 什么时候应该使用其中一种而不是另一种 来自结构文档 http www ruby doc org core 2 1 2 Struct html Struct 是一种使