เลยขอโฆษณา feature ของ Rails หน่อย
ข้อดีอย่างหนึ่งของ Ruby ก็คือ Class มัน Open
ความหมายก็คือ เราสามารถ extends class ได้
โดยไม่ต้องไปยุ่งกับการ edit และ recompile ตัว source ของมัน
ถ้าเราไปดูใน Module ActiveSupport ของ rails
จะเห็นว่ามันมี directory อยู่อัน ที่ชื่อ core_ext
ตรงนี้คือที่ rails ใช้เก็บ extension ต่างๆ ที่ rails ต่อยอดจาก ruby core class
อย่างตัวอย่างที่คุณ Apirak ยกมา
x = x + 1.month
ถ้าลองเปิด file core_ext/nummeric/times.rb ดู
จะเห็นว่าเขาเขียนไว้ประมาณนี้
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Numeric #:nodoc:
...
module Time
def seconds
self
end
alias :second :seconds
def minutes
self * 60
end
alias :minute :minutes
def hours
self * 60.minutes
end
alias :hour :hours
def days
self * 24.hours
end
alias :day :days
def weeks
self * 7.days
end
alias :week :weeks
...
จะเห็นว่าเขียนเป็น module อยู่
file ที่ include จริงๆ จะอยู่ใน core_ext/numeric.rb
class Numeric #:nodoc:
include ActiveSupport::CoreExtensions::Numeric::Time
include ActiveSupport::CoreExtensions::Numeric::Bytes
end
ลองดูตัวอย่างอื่นๆ ที่ rails เขา extends ไว้
1.even? # => false
2.odd? # => false
1.ordinalize # => "1st"
3.ordinalize # => "3.rd"
[1,2,3].to_sentence # => "1, 2, and 3"้
ของที่บ้านเราใช้กัน ก็น่าจะพวก
11.to_thai # => สิบเอ็ด
No comments:
Post a Comment