2012-08-18 27 views
5

Tôi đã xem một screencast với Jim Weirich nơi ông bắt đầu để làm một cái gì đó như thế này:đèo giá trị cho cha mẹ trong khai báo lớp trong Ruby

class Subuser < User("Type") 
end 

Liệu của Ruby cho phép bạn vượt qua đối số khi định nghĩa một lớp cha mẹ? Tôi không thể đưa ra một ví dụ mà thực sự sẽ hoạt động.

+0

screencast là gì? –

+0

[Peepcode] (https://peepcode.com/products/play-by-play-jimweirich-ruby) chơi bằng cách chơi với Jim Weirich – Kormie

Trả lời

7

Bạn có thể làm điều đó bằng cách tuyên bố một phương pháp User đó có một đối số và trả về một lớp:

class Admin 
end 

class Client 
end 

def User(arg) 
    case arg 
    when :admin 
     Admin 
    when :client 
     Client 
    end 
end 

class Subuser < User(:admin) 
end 

Subuser.superclass 
# => Admin 
+3

Thuật sĩ như thế này, trong khi mát mẻ trong một màn hình, không phải là rất thú vị cho người khác duy trì. Hãy nhớ rằng "những người khác" thường bao gồm bản thân tương lai của bạn mà quên những điều này có nghĩa là gì. Với bất kỳ may mắn nào bạn sẽ có thể tìm thấy câu trả lời này và làm mới bộ nhớ của bạn khi điều đó xảy ra, nhưng tốt nhất nên tránh ngay từ đầu. – tadman

+0

"Thuật sĩ" này như thế nào? Phương pháp viết hoa là phổ biến (ví dụ: 'Số nguyên (" 1 ")') và kế thừa từ biểu thức là phổ biến (ví dụ: 'lớp bất kỳ

+0

Ví dụ về cấu trúc là khác nhau vì nó là phương pháp mới trên Struct, tức là nó giống như một phương thức. Ví dụ duy nhất khác mà tôi gặp phải trong stdlib là một trong những lớp đại biểu (không nhớ cái nào). –

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