2011-12-14 25 views
7

Tôi có một mô-đun tồn tại để được bao gồm trong hai lớp tương tự. Một số phương thức được đưa vào mô-đun để sử dụng giống nhau bởi cả hai lớp trả về một cá thể mới.Cách trả về một cá thể mới của bản thân từ một phương thức thể hiện ruby ​​

Nhưng làm cách nào để mã hóa trong mô-đun mà hàm tạo cho lớp chứa phải được gọi?

Một ví dụ đơn giản:

module Point3D 
    def initialize(x,y,z) 
    @x = x 
    @y = y 
    @z = z 
    end 

    def * (scalar) 
    <myclass>.new(@x * scalar, @y * scalar, @z * scalar) 
    end 
end 

class Vertex 
    include Point3D 
end 

class Vector 
    include Point3D 
end 

Vì vậy, trong định nghĩa của * làm thế nào tôi sẽ gọi các nhà xây dựng như vậy trong bối cảnh của lớp Vertex nó trở lại một Vertex mới và trong bối cảnh của lớp Vector nó trả lại một Vector mới mà không cần phải khai báo lại tất cả các phương thức như vậy trong mỗi lớp?

Trả lời

12

Bạn có thể gọi phương thức 'lớp' để nhận lớp obj.

Đối với trường hợp này, đó là

def * (scalar) 
    self.class.new(...) 
end 
+1

ah người đàn ông .. bạn đánh bại tôi trong vài giây. : @ –

3

Sử dụng self.class để có được những đối tượng của lớp học, nơi các mô-đun được bao gồm.

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