Trong Ruby, giả sử tôi có một lớp Foo
để cho phép tôi lập danh mục bộ sưu tập Foos lớn của mình. Đó là một đạo luật cơ bản của tự nhiên rằng tất cả Foos là màu xanh lá cây và hình cầu, vì vậy tôi đã xác định phương pháp lớp học như sau:Ủy quyền các phương thức thể hiện cho phương thức lớp
class Foo
def self.colour
"green"
end
def self.is_spherical?
true
end
end
này cho phép tôi làm
Foo.colour # "green"
nhưng không
my_foo = Foo.new
my_foo.colour # Error!
mặc dù thực tế là my_foo
rõ ràng là màu xanh lục.
Rõ ràng, tôi có thể xác định phương pháp thể hiện colour
gọi self.class.colour
, nhưng điều đó trở nên khó sử dụng nếu tôi có nhiều đặc điểm cơ bản như vậy. Tôi cũng có thể làm điều đó bằng cách xác định method_missing
để thử lớp cho bất kỳ phương pháp còn thiếu nào, nhưng tôi không rõ liệu đây có phải là việc tôi nên làm hay hack xấu xí hay cách thực hiện an toàn (đặc biệt là tôi thực sự là dưới ActiveRecord trong Rails, điều mà tôi hiểu là một số thông tin thú vị của Clever với method_missing).
Bạn sẽ đề xuất điều gì?
Nếu không muốn tranh luận về colo (u) r của cuộc đua xe đạp, bạn nên sử dụng tiếng Anh Mỹ bằng mã, thay vì tiếng Anh thịnh vượng chung. –
Đây là mã cá nhân của riêng tôi; những người duy nhất có thể thấy đó là tôi, và một vài người bạn cũng đến từ Anh. Tôi sẽ sử dụng mã người Mỹ ở nơi làm việc nếu phong cách nhà ở yêu cầu nó - tôi sẽ không sử dụng nó theo cách riêng của mình. – Chowlett
@ Chowlett, đó chắc chắn là lựa chọn của bạn. Nhưng bạn vẫn sẽ kết hợp chúng, ví dụ: khi bạn truy cập '@ colour' trong phương thức' initialize'. – ecoologic