2010-07-29 23 views
5

Tôi có một Mô-đun có hằng số và biến số.Cách bao gồm hằng số và biến của Mô-đun?

Tôi tự hỏi làm thế nào tôi có thể đưa chúng vào một lớp học?

module Software 
    VAR = 'hejsan' 

    def exit 
    @text = "exited" 
    puts @text 
    end 
end 

class Windows 
    extend Software 
    def self.start 
    exit 
    puts VAR 
    puts @text 
    end 
end 

Windows.start 

Điều này có khả thi không?

+0

biến là, hằng số không thể chuyển. –

Trả lời

3

Thực hiện chính xác những gì bạn muốn là không thể. Các biến cá thể là đúng đối tượng.

Điều này xảy ra để làm những gì bạn mong đợi, nhưng @text được đặt trên Windows không Software.

module Software 
    VAR = 'hejsan' 

    def exit 
    @text = "exited" 
    puts @text 
    end 
end 

class Windows 
    class <<self 
    include Software 
    def start 
     exit 
     puts VAR 
     puts @text 
    end 
    end 
end 

Windows.start 
+0

Điều gì về hằng số? –

+1

'bao gồm Software' như trong ví dụ của tôi sẽ làm điều đó. Nó sẽ chỉ được bao gồm trong metaclass - vì vậy bạn có thể sử dụng 'VAR' từ các phương thức lớp chứ không phải các phương thức cá thể. Đây có phải là những gì bạn muốn? – taw

9

của Ruby 1.9.3:

module Software 
    VAR = 'hejsan' 

    module ClassMethods 
    def exit 
     @text = "exited" 
     puts @text 
    end 
    end 

    module InstanceMethods 

    end 

    def self.included(receiver) 
    receiver.extend   ClassMethods 
    receiver.send :include, InstanceMethods 
    end 
end 

class Windows 
    include Software 
    def self.start 
    exit 
    puts VAR 
    puts @text 
    end 
end 

Windows.start 

Trong IRB:

exited 
hejsan 
exited 
+0

Bạn có thể vui lòng thêm một chút giải thích cho câu trả lời của mình không. –

+0

Xin lỗi, đã lâu rồi. Gosh, đây không phải là một câu hỏi hay câu trả lời hay. Nhưng bạn có thể đến đây vì bạn muốn làm một cái gì đó tương tự. Có lẽ nếu bạn hỏi một câu hỏi mới hoặc giải thích về những gì bạn đang tìm kiếm? – kwerle

+0

Không, đó là một câu trả lời tuyệt vời nhưng đã tìm kiếm một lời giải thích cho một cái gì đó mà tôi không hiểu. Nó sẽ rất hữu ích nếu bạn có thể giải thích những gì được bao gồm phương pháp, người nhận là gì, receiver.send là gì: bao gồm và receiver.extend. –

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