Thuộc tính attribute
phương thức lớp từ Ohm::Model
xác định các phương thức trình truy cập và trình biến đổi cho thuộc tính được đặt tên:
def self.attribute(name)
define_method(name) do
read_local(name)
end
define_method(:"#{name}=") do |value|
write_local(name, value)
end
attributes << name unless attributes.include?(name)
end
Vì vậy, khi bạn nói attribute :foo
, bạn nhận được các phương pháp này miễn phí:
def foo # Returns the value of foo.
def foo=(value) # Assigns a value to foo.
Bạn có thể sử dụng send
để gọi phương thức mutator như sau:
@ohm_obj.send((att + '=').to_sym, val)
Nếu bạn thực sự muốn nói @ohm_obj[att] = val
thì bạn có thể thêm một cái gì đó như sau vào OhmObj
của mình lớp:
def []=(att, value)
send((att + '=').to_sym, val)
end
Và bạn có thể muốn phiên bản trình truy cập cũng duy trì tính đối xứng:
def [](att)
send(att.to_sym)
end