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)