Ruby 如何使用case语句返回哈希?

Ruby 如何使用case语句返回哈希?,ruby,hashmap,Ruby,Hashmap,我正在尝试编写一个函数,以日期的天数为准,例如,今天(3月29日)是一年中的第88天。然后返回包含月份和月份中的日期的哈希: {"month" => "March, "day" => 29} 我不太清楚这段代码有什么问题,但它总是返回nil。有什么想法吗?我使用的是Ruby 1.8.7 p358 def number_to_date(days) date = case days when days <= 31 then {"month" => "Janua

我正在尝试编写一个函数,以日期的天数为准,例如,今天(3月29日)是一年中的第88天。然后返回包含月份和月份中的日期的哈希:

{"month" => "March, "day" => 29}
我不太清楚这段代码有什么问题,但它总是返回
nil
。有什么想法吗?我使用的是Ruby 1.8.7 p358

def number_to_date(days)
  date = case days
    when days <= 31  then {"month" => "January",   "day" => days}
    when days <= 59  then {"month" => "February",  "day" => (days - 31)}
    when days <= 90  then {"month" => "March",     "day" => (days - 59)}
    when days <= 120 then {"month" => "April",     "day" => (days - 90)}
    when days <= 151 then {"month" => "May",       "day" => (days - 120)}
    when days <= 181 then {"month" => "June",      "day" => (days - 151)}
    when days <= 212 then {"month" => "July",      "day" => (days - 181)}
    when days <= 243 then {"month" => "August",    "day" => (days - 212)}
    when days <= 273 then {"month" => "September", "day" => (days - 243)}
    when days <= 304 then {"month" => "October",   "day" => (days - 273)}
    when days <= 334 then {"month" => "November",  "day" => (days - 304)}
    when days <= 365 then {"month" => "December",  "day" => (days - 334)}
  end
  return date
end
def编号截止日期(天)
日期=病例天数
当天为“一月”、“天”=>天时}
当天数为“2月”、“天”=>(天-31)}
当天“三月”,“天”=>(天-59)}
当天为“四月”、“天”=>(天-90)}
当天数为“五月”、“日”=>(天数-120)}
当天“六月”,“天”=>(天-151)}
当日期为“7月”、“日”=>(天-181)}
当日期为“八月”,“日”=>(天-212)}
当天“9月”、“天”=>(天-243)}
当天数为“10月”、“日”=>(天数-273)}
当天数为“11月”、“日”=>(天数-304)}
当天数为“12月”、“日”=>(天数-334)}
结束
返回日期
结束

您只需要稍微调整一下语法。从
date=case days
语句中删除
days
。否则,您的条件语句将与
days
变量进行比较。

如果要在每个
when
子句中使用表达式,则需要使用裸
case
语句。否则,Ruby将调用
(days Rein的实现很好,所以可以忽略我的答案:)
def number_to_date(days)
  date = case
    when days <= 31  then {"month" => "January",   "day" => days}
    when days <= 59  then {"month" => "February",  "day" => (days - 31)}
    # ...
  end
  return date
end
def number_to_date(days)
  date = Date.ordinal(Date.today.year, days)
  {"month" => Date::MONTHNAMES[date.month], "day" => date.day}
end