2011-01-14 53 views
5

tôi có một số mã trong Ruby đây dưới đây:làm thế nào để truy cập vào một biến của lớp bên ngoài từ lớp bên trong ruby ​​

class A 
    @@lock = Monitor.new 
    class B 
    def method 
     @@lock.synchronize 
     puts "xxxxx" 
     end 
    end 
    end 
end  

sau khi chạy nó ném một lỗi mà nói rằng bên dưới:

uninitialized lớp biến @@ khóa trong A :: B (TênError)

nếu tôi muốn biết cách truy cập lớp bên ngoài lớp A @ @ lock từ bên trong lớp B phương pháp, làm thế nào để làm điều đó? cảm ơn bạn trước.

Trả lời

1

Cách duy nhất để truy cập biến lớp học này là thông qua một phương pháp accessor

class A 
    def self.lock 
    @@lock ||= Monitor.new 
    end 

    class B 
    def method 
     A.lock.synchronize 
     puts "xxxxx" 
     end 
    end 
    end 
end 
+0

thank u rất nhiều! tôi đang cố gắng như những gì bạn nói. – ywenbo

6

Tôi không nghĩ rằng bạn có thể không xác định một accessor.

Lớp B được lexically scoped bên trong A, vì vậy tên thật của nó là A :: B và nhiều thứ khác là khác nhau.

Nhưng nó không phải là một đứa trẻ hoặc bất kỳ loại khác của lớp được thừa kế, vì vậy nó không thực sự có bất kỳ quyền đặc biệt để xem yếu tố private hay protected hoặc địa phương của A.

+0

cảm ơn bạn đã giải thích chi tiết – ywenbo

Các vấn đề liên quan