You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中访问并打印数组内存储的类实例的指定属性?

解决方案

补充说明:直接调用puts array[2]只会输出该实例的对象内存标识,不会自动输出属性值,因为Ruby默认的Object类的to_s方法就是输出类名+内存地址,自定义类没有重写的话就会继承这个行为。

1. 直接获取指定实例的单个属性

你已经通过attr_accessor声明了三个可读写的实例属性,直接通过实例.属性名访问即可:

# 获取第三个实例(数组索引为2)的day属性并打印
puts array[2].day
# 输出结果为 23

2. 打印实例的所有属性

有两种常用实现方式:

  • 手动拼接属性输出:
target_date = array[2]
puts "年:#{target_date.year},月:#{target_date.month},日:#{target_date.day}"
# 输出结果为 年:2012,月:1,日:23
  • 重写Date类的to_s方法(更推荐,后续直接puts实例就会输出格式化内容):
class Date 
    attr_accessor :day, :month, :year
    # 新增to_s方法自定义实例打印格式
    def to_s
        "#{year}年#{month}月#{day}日"
    end
end

# 之后直接puts即可输出格式化内容
puts array[2]
# 输出结果为 2012年1月23日

3. 根据用户输入动态调用对应实例的属性

注意Ruby数组默认从0开始索引,如果用户输入的是自然序号(1对应第一个元素),需要先做减1处理,可通过send方法动态调用属性:

# 示例:用户输入要查询的序号为3,要查询的属性为month
user_index = 3
user_attr = "month"

target = array[user_index - 1]
# 动态调用属性
puts target.send(user_attr.to_sym)
# 输出结果为 1

内容的提问来源于stack exchange,提问作者Theo1290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:06:07