加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 01:25:41 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个函数,该函数采用日期的日期编号,例如,今天(3月29日)是一年中的第88天.然后它返回一个包含月份和月份日期的哈希: {"month" = "March,"day" = 29} 我无法弄清楚这段代码有什么问题,但它总是返回nil.有什么想法吗?我使用的是Ruby 1.8.7 p35
我正在尝试编写一个函数,该函数采用日期的日期编号,例如,今天(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

解决方法

如果要在每个when子句中使用表达式,则需要使用裸case语句.否则,Ruby将调用(days< = 31)=== days,这将永远不会成立.

def number_to_date(days)
  date = case
    when days <= 31  then {"month" => "January","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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读