Tôi đã theo ấn tượng rằng định nghĩa lớp trong Ruby có thể được mở cửa trở lại:biến địa phương trong định nghĩa lớp/phạm vi
class C
def x
puts 'x'
end
end
class C
def y
puts 'y'
end
end
này hoạt động như mong đợi và y
được thêm vào định nghĩa lớp gốc.
Tôi đang bối rối là tại sao đoạn mã sau không hoạt động như mong đợi:
class D
x = 12
end
class D
puts x
end
này sẽ gây ra một ngoại lệ NameError
. Tại sao có một phạm vi địa phương mới bắt đầu khi một lớp học được mở cửa trở lại? Điều này có vẻ hơi phản trực giác. Có cách nào để tiếp tục phạm vi địa phương trước đó khi một lớp được mở rộng không?
Đây là một câu hỏi hay, nhưng có lý do bạn muốn làm điều này thay vì lưu trữ một biến cá thể trên chính đối tượng lớp (tức là thay thế 'x' bằng' @ x' ở trên)? – Phrogz
@Phrogz Không, không có lý do gì tôi muốn làm điều này trong mã sản xuất. Tôi yêu cầu điều này để làm xước một sự khôn ngoan về trí tuệ thay vì giải quyết một vấn đề thực tế. – Matty