作者johnlinvc (阿翔)
看板Ruby
標題Re: [問題] 如何改寫一變數的值
時間Wed Mar 11 12:48:17 2015
※ 引述《ireullin (raison detre)》之銘言:
: 我想修改一個變數的值
: 方式如下
: params[:scaffold_demo][:notified_at] =
: Time.parse(params[:scaffold_demo][:notified_at]).getutc
: 請問不知道有沒有更聰明的寫法
: 例如像下面一樣用block解決問題
: 當然下面這個是不可行的
: params[:scaffold_demo][:notified_at] {|v| v=Time.parse(v).getutc }
: 但想請問有沒有類似的方法
有,但是不建議,因為反而降低了可讀性
[7] pry(main)> params = {scaffold_demo: {notified_at: Time.now.to_s}}
=> {:scaffold_demo=>{:notified_at=>"2015-03-11 12:46:56 +0800"}}
[8] pry(main)> params[:scaffold_demo].tap{|h|h[:notified_at] = Time.parse(h[:notified_at]).getutc}
=> {:notified_at=>2015-03-11 04:46:56 UTC}
[9] pry(main)> params
=> {:scaffold_demo=>{:notified_at=>2015-03-11 04:46:56 UTC}}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.168.0.73
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Ruby/M.1426049301.A.A46.html
1F:推 ireullin: 但是無法做到 03/11 18:29
2F:→ ireullin: params[:scaffold_demo][:notified_at].tap {|v| v=Time 03/11 18:29
3F:→ ireullin: .parse(v).getutc } 03/11 18:29
4F:→ ireullin: 有辦法讓string pass by reference嗎 03/11 18:30
5F:→ ireullin: 或是還有其他方式? 03/11 18:32
6F:推 mars90226: 沒有 03/11 19:23
7F:→ johnlinvc: 因為getutc 完他就不是String, 沒辦法直接覆蓋 03/11 21:06