Ruby on rails 这段ruby(rails)代码简单易读吗?

Ruby on rails 这段ruby(rails)代码简单易读吗?,ruby-on-rails,ruby,Ruby On Rails,Ruby,首先 第二 [1] pry(main)> 1.month.from_now.change(%i(min sec).inject({}){|h, i| h.merge(i => Time.current.send(i))}.merge(hour: 10)) => Sat, 03 Aug 2019 10:25:00 KST +09:00 哪个代码更可读 我认为第一段代码不那么容易阅读 第一个代码可以分为两部分 1.从现在开始的一个月。更改- 因此,当不熟悉ruby的人阅读第一段代

首先

第二

[1] pry(main)> 1.month.from_now.change(%i(min sec).inject({}){|h, i| h.merge(i => Time.current.send(i))}.merge(hour: 10))
=> Sat, 03 Aug 2019 10:25:00 KST +09:00
哪个代码更可读

我认为第一段代码不那么容易阅读

第一个代码可以分为两部分

1.从现在开始的一个月。更改
-

因此,当不熟悉ruby的人阅读第一段代码时,有点困难

顺便说一下,如果有人知道
Time.change
method,那么第二个代码就更简单了

区别在于第一个代码比第二个代码重复性小

  • 时间电流
  • 第一个代码是上面的关键字只使用一次。所以第一个代码使用额外的
    inject
    方法和
    merge
    方法,并增加了复杂性


    我使用的代码是什么?

    第二个代码绝对比第一个更可读。第一个版本似乎更容易阅读。

    第二个版本更容易阅读。这里有一些其他的事情可能会有所帮助

    • 将当前时间放入一个变量中,以便调用
      1.month.from\u now
      ,并使用相同的时间调用
      min
      sec
      参数
    • 按逻辑读取顺序调整时间(小时、分钟、秒)
    • 我认为,使用
      advance
      链接会使它更具可读性
    例如:

    [3] pry(main)> %i(min sec).inject({}){ |h, i| # https://apidock.com/ruby/Enumerable/inject
    [3] pry(main)*   h.merge(i => Time.current.send(i)) # https://apidock.com/ruby/Object/send
    [3] pry(main)* }.merge(hour: 10)
    => {:min=>34, :sec=>48, :hour=>10}
    

    Wt'heck正在这里进行:PYou可能会在codereview.stackexchange.com上获得关于这个问题的更好流量,(我无论如何都会给出一个答案)我投票结束这个问题,因为它属于codereview.stackexchange.com
    [3] pry(main)> %i(min sec).inject({}){ |h, i| # https://apidock.com/ruby/Enumerable/inject
    [3] pry(main)*   h.merge(i => Time.current.send(i)) # https://apidock.com/ruby/Object/send
    [3] pry(main)* }.merge(hour: 10)
    => {:min=>34, :sec=>48, :hour=>10}
    
    today = Time.current
    next_month = today.
      advance(months: 1).
      change(hour: 10, min: today.min, sec: today.sec)