Ruby项目求助:无法从Suggestion类存储数组获取已保存实例
现有实现的有效基础
你目前的代码已经搭好了存储所有类实例的核心框架:
- 定义了类级别的类变量
@@all,专门用于存储Suggestion类的所有实例引用 - 实现了类方法
self.all,可以直接返回存储全部实例的数组 - 在初始化方法
initialize里,把每次新建的实例自动追加到@@all数组中,这部分逻辑完全正确
现存问题与调整方案
当前无法正常调取所有已创建实例的核心原因:
list_events方法内的map没有绑定实际处理逻辑,后续的属性映射块被注释,空的map调用和直接返回原数组没有区别- 当前的
initialize方法只接收type和participants两个参数,activity、price等其他属性的赋值逻辑全被注释,即使遍历到实例也无法读取对应属性值
可直接运行的调整后代码
class Suggestion attr_accessor :type, :participants attr_reader :activity, :price, :link, :key, :accessibility @@all = [] def initialize(type, participants, activity:, price:, link:, key:, accessibility:) @type = type @participants = participants @activity = activity @price = price @key = key @link = link @accessibility = accessibility @@all << self end def self.all @@all end def list_events Suggestion.all.map do |event| { activity: event.activity, type: event.type, participants: event.participants, price: event.price, link: event.link, key: event.key, accessibility: event.accessibility } end end end
实际调用方式
每次新建Suggestion实例时按定义传入对应参数,直接调用类的all方法或者实例的list_events方法,就能获取全部已创建的实例数据,示例:
# 新建测试实例 Suggestion.new("户外", 2, activity: "短途徒步", price: 0, link: "本地路径", key: "outdoor_001", accessibility: 0.8) Suggestion.new("室内", 4, activity: "桌面桌游", price: 30, link: "本地路径", key: "indoor_001", accessibility: 0.5) # 调取所有原始实例 pp Suggestion.all # 调取结构化的事件列表 pp Suggestion.new("测试类型", 1).list_events
注意:目前的实例存储是存在内存里的,程序重启后所有存到
@@all里的实例都会清空,如果需要持久化存储需要搭配数据库或者本地文件读写逻辑。
内容的提问来源于stack exchange,提问作者Pokedexrockett
相关产品推荐
相关产品推荐

