định nghĩa mô-đun đánh giá là 'đây là ...', tại sao?
Trong Ruby, mọi thứ đều là biểu thức, không có báo cáo hoặc khai báo. Điều đó có nghĩa là mọi thứ sẽ đánh giá một giá trị. Ví dụ: phương pháp puts
luôn đánh giá là nil
, giống như biểu thức định nghĩa phương thức def
(ngoại trừ trong Rubinius, trong đó biểu thức def
đánh giá là CompiledMethod
đối tượng cho phương thức được xác định).)
Vì vậy, nếu mọi thứ được đánh giá thành giá trị, biểu thức định nghĩa mô-đun sẽ đánh giá là gì? Vâng, có một vài ứng cử viên: nó có thể đánh giá là nil
, giống như biểu thức định nghĩa phương thức. Hoặc nó có thể tự đánh giá đối tượng mô-đun, sau khi tất cả, điều này là những gì chúng tôi đang xác định, phải không? Nhưng trên thực tế, Matz đã chọn một tùy chọn thứ ba: các biểu thức định nghĩa mô-đun (và lớp) thực sự đánh giá bất kỳ biểu thức cuối cùng nào bên trong thân xác định mô-đun được đánh giá. (Điều này cho phép bạn dễ dàng mô phỏng hai khả năng khác bằng cách chỉ cần đặt nil
hoặc self
làm biểu thức cuối cùng bên trong thân xác định mô-đun.)
Trong trường hợp của bạn, biểu thức cuối cùng bên trong thân xác định mô-đun là một nhiệm vụ. Nhưng, một bài tập? Cái quái gì rằng trả lại? Đó không phải là một tuyên bố sao? Không, không phải trong Ruby. Mọi thứ là một biểu thức, và các bài tập không là ngoại lệ: biểu thức gán đánh giá bất kỳ thứ gì bên tay phải đánh giá. Ở đây, phía bên tay phải của biểu thức gán là một chuỗi ký tự, để đánh giá đối tượng chuỗi.
Vì vậy, toàn bộ biểu thức định nghĩa mô đun sẽ đánh giá thành chuỗi 'this is a const in module'
.
Nguồn
2009-11-24 02:36:58
cho một sử dụng ném đi, bạn có thể làm 'Object.new.extend (ModeName) .aux' – AJcodez