(Câu hỏi đã được đăng tại Ruby Forum, nhưng không gợi ra bất kỳ câu trả lời nào ở đó).Phương pháp thể hiện được thêm động không thể truy cập biến lớp
Đây là mã của tôi:
class MC
def initialize
@x = 5
@@y = 6
end
def f
puts @x
puts @@y
end
end
m = MC.new
m.f
m.f
sản xuất sản lượng dự kiến mà không có lỗi:
5
6
Nhưng điều này:
def m.g
puts @x
puts @@y
end
m.g
sản xuất:
5
warning: class variable access from toplevel
NameError: uninitialized class variable @@y in Object
Tại sao tôi có thể truy cập @@y
từ f
, nhưng không phải từ g
?
Đề cập đến toplevel
và Object
trong cảnh báo và thông báo lỗi gây nhầm lẫn với tôi.
@x
được in dưới dạng 5
, vì vậy môi trường của nó là MC
. Điều này loại trừ khả năng @x
và @@y
trong định nghĩa m.g
tham chiếu đến môi trường phức tạp (Object
) thay vì MC
.
Tại sao tôi nhận được thông báo lỗi?
Điều này đã được hỏi trước: http://stackoverflow.com/q/24510948/477037 – Stefan
@Stefan: True. Thật không may, không có lời giải thích tốt có là tốt. –