0%

Ruby - 關於 refector 那檔事

  • 善用 attr_readerattr_accessorattr_writer
    • 方便之後外部使用
    • initialize 會使用實體變數,之後即可使用 method 呼叫該變數
    • attr_reader 產生 getter,attr_writer 產生 setter,而 attr_accessor 則會產生 gettersetter
1
2
3
4
5
6
7
8
9
class Tom
attr_accessor :age
def initialize(age: 20)
@age = age
end
end

tom = Tom.new(age: 30)
puts tom.age
  • 要測試的東西提取到 public method,比較好測試。
  • 格式化時間:
    • 可以使用 Datetime#strftime
    • 透過 I18n 格式化
      • I18n.l( Time.now )
      • I18n.l( Time.now, :format => :default )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//example
//ja.yml
time:
am: 午前
formats:
default: "%Y年%m月%d日(%a) %H時%M分%S秒 %z"
long: "%Y/%m/%d %H:%M"
short: "%m/%d %H:%M"
only_date: "%Y/%m/%d"
time_only: "%H:%M"
without_seconds: '%Y/%m/%d(%a)%H:%M'
full_slashed: '%Y/%m/%d(%a)%H:%M'
full_localized: "%Y年%m月%d日(%a)%H:%M"
pm: 午後
  • 如果變數被重複使用,多個地方重複出現,拆開實作為佳。
    • 如何拆開:寫成 private method
    • 拆開後可以在 public method 任意使用
    • 使用 ||=
1
2
3
4
5
6
7
8
9
def whitelist_users_count
whitelist_users_count = users.date_range(recent_one_week).count
end

private

def users
@users ||= User.where('email !~~* ? AND created_at <= ?', '%5xruby%', end_date)
end
  • 多多善用 << operator
    • add items to the result array
1
2
3
4
5
6
7
8
def message
message=[]
message << "a"
message << "b"
message.join("&")
end

puts message # a&b