如何在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
相关产品推荐
相关产品推荐

