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

Ruby遍历Departure模型并为符合条件实例分配住宿日期

修正你的Ruby类并实现需求

先看你代码里的几个明显问题:

  • Departure的构造函数完全没按需求来,既没接收date、price参数,还错误定义了@departure数组;而且你需要修改accommodation_start和accommodation_end,所以这两个属性不能只加attr_reader,得用attr_accessor。
  • Accommodation的构造函数里把@name赋值成了first,这是笔误,应该是传入的name参数。
  • 要实现Departure关联多个Accommodation,得给Departure加个实例变量来存储关联的住宿实例。

下面是修正后的完整代码,同时实现了遍历Departure实例、给符合日期条件的实例分配住宿起止日期的逻辑:

require 'date'

class Departure
  # 允许读取所有属性,同时允许修改住宿起止日期
  attr_reader :date, :price, :accommodations
  attr_accessor :accommodation_start, :accommodation_end

  def initialize(date, price)
    # 把传入的日期字符串/对象转成Date类型,方便比较
    @date = Date.parse(date.to_s)
    @price = price
    @accommodations = [] # 存储关联的Accommodation实例
    @accommodation_start = nil
    @accommodation_end = nil
  end

  # 新增方法:添加关联的住宿
  def add_accommodation(accommodation)
    @accommodations << accommodation if accommodation.is_a?(Accommodation)
  end
end

class Accommodation
  attr_reader :name, :price, :location

  def initialize(name, price, location)
    @name = name # 修正笔误
    @price = price
    @location = location
  end
end

# 示例用法:创建几个Departure和Accommodation实例
dep1 = Departure.new('2000-06-30', 1000)
dep2 = Departure.new('2000-07-02', 1200)
dep3 = Departure.new('2024-05-10', 1500)

acc1 = Accommodation.new('海边酒店', 300, '三亚')
acc2 = Accommodation.new('山景民宿', 250, '大理')

# 给departure关联住宿
dep2.add_accommodation(acc1)
dep3.add_accommodation(acc2)

# 定义目标日期
target_date = Date.new(2000, 7, 1)

# 遍历所有Departure实例(这里假设存在一个存储所有实例的数组)
all_departures = [dep1, dep2, dep3]
all_departures.each do |departure|
  if departure.date > target_date
    # 这里可以根据需求设置具体的起止日期,示例用出发日期后3天和后7天
    departure.accommodation_start = departure.date + 3
    departure.accommodation_end = departure.date + 7
    puts "已为出发日期#{departure.date}的行程分配住宿日期:#{departure.accommodation_start} 至 #{departure.accommodation_end}"
  end
end

说明:

  • 引入了date库来处理日期解析和比较,确保日期操作的准确性。
  • Departure类新增了add_accommodation方法来关联多个Accommodation,符合"Departure关联多个Accommodation"的需求。
  • 遍历的时候需要把所有Departure实例存到一个数组里(比如示例里的all_departures),这样才能统一处理。
  • 住宿起止日期的赋值逻辑可以根据你的实际需求调整,示例里只是简单设置为出发日期后3天到7天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:18:27