Ruby中能否对Symbol执行算术运算?如何自定义方法实现需求?
解决Symbol无法直接递增实现日期循环的问题
你遇到的错误是因为Ruby的Symbol类型本身没有定义+方法,直接对:Sunday这类Symbol做加法操作肯定会报错。要实现你想要的“日期循环递增”效果,可以通过自定义方法来搞定,下面给你两种可行的实现方式:
方式一:给Symbol类添加自定义实例方法
这种方式可以让你直接在Symbol对象上调用方法,接近你原本的写法:
days_of_week = %i(Sunday Monday Tuesday Wednesday Thursday Friday Saturday) class Symbol def next_day(days_list) current_index = days_list.index(self) # 计算下一个索引,超出数组长度就回到0 next_index = (current_index + 1) % days_list.length days_list[next_index] end end today = :Sunday today = today.next_day(days_of_week) # 此时today是:Monday today = today.next_day(days_of_week) # 此时today是:Tuesday # ... 循环到Saturday后,再调用会回到Sunday
方式二:封装独立工具方法(不修改Symbol类)
如果不想修改原生的Symbol类,避免污染全局类,可以写一个单独的方法来处理:
days_of_week = %i(Sunday Monday Tuesday Wednesday Thursday Friday Saturday) def next_day(current_day, days_list) current_index = days_list.index(current_day) days_list[(current_index + 1) % days_list.length] end today = :Sunday today = next_day(today, days_of_week) # 同样实现递增循环
补充说明
两种方式核心都是利用数组的索引来定位当前日期,通过(索引+1) % 数组长度的方式自动处理循环边界,不用单独写if判断是否超出:Saturday,代码更简洁。
内容的提问来源于stack exchange,提问作者Leonard
相关产品推荐
相关产品推荐

