【问题标题】:rails MONTHNAMES to_srails MONTHNAMES to_s
【发布时间】:2009-10-30 09:16:51
【问题描述】:

这就是问题所在:

在一个库中,我需要将 MONTHNAMES 打印到字符串

如果我尝试

Date::MONTHNAMES.inspect

结果是

=> "[nil, \"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\" , \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"]"

这很好,但我不需要第一个元素,所以

month_names = Date::MONTHNAMES
month_names.shift
month_names.inspect

但是

ActionView::TemplateError (can't modify frozen array) 

有什么解决方法吗? 谢谢

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    ...还给你整个月(没有第一个 nil)。

    Date::MONTHNAMES.compact
    

    【讨论】:

      【解决方案2】:
      Date::MONTHNAMES.slice(1,12).inspect
      

      给你整个月(没有第一个nil)。

      【讨论】:

      • Date::MONTHNAMES.compact 更好
      【解决方案3】:

      如错误消息中所示,Date::MONTHNAMES 是一个冻结的对象,因此您无法修改它(shift 将修改它,嗯,移出第一个元素)。你可以通过以下方式实现你想要的:

      puts Date::MONTHNAMES[1..-1].inspect

      【讨论】:

        【解决方案4】:

        虽然在这里切片/数组索引解决方案可能更好,但您始终可以复制冻结的数组并处理副本:

        month_names = Date::MONTHNAMES.dup
        month_names.shift
        month_names.inspect
        

        应该给你你想要的。

        【讨论】:

          【解决方案5】:

          Date::MONTHNAMES.reject{|m| m.nil?}

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-12-03
            • 2023-03-24
            • 1970-01-01
            • 2012-12-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多