2010-10-04 31 views
5
a = Numeric.new # doesn't take an argument 

Tôi không thể tưởng tượng trường hợp sử dụng cho việc này. Bạn có thể?Tại sao Ruby có Numeric.new?

+3

Bạn có nghĩa là 'Numeric.new' không phải' NumeriC# new' .... phương thức '#' có nghĩa là '' (nhưng trong trường hợp này 'new' là phương thức lớp) – horseyguy

+0

Không biết. Đã sửa tiêu đề. Cảm ơn. – steenslag

Trả lời

3

Lớp Class định nghĩa một phương pháp new dụ. Và vì vậy phương pháp lớp học new trên Numeric chỉ là một sự nắm giữ từ đó - nó không làm bất cứ điều gì - nghĩ về nó như một trong những cơ quan di truyền mà động vật thừa hưởng từ tổ tiên xa xôi - như phụ lục trên con người.

Lưu ý rằng các lớp con của Numeric chẳng hạn như FixnumFloat và thân nhân của họ khám phá không xác định phương thức new. Tôi đoán họ chỉ không bận tâm undefining nó cho Numeric như trường hợp trực tiếp của lớp này không bao giờ thực sự tồn tại, và nó không có hại giữ nó xung quanh.

+0

Vâng, đó là cách tôi phát hiện ra. chơi xung quanh trong irb, cố gắng Float.new ('NaN'), không (NoMethodError). Đi cho Numeric.new ("NaN"), kết thúc với một vô dụng (?) Numeric. – steenslag

1

Mọi thứ trong Ruby là một đối tượng, ngay cả các lớp học. Vì vậy, để không có một hàm tạo cho Numeric có nghĩa là không có lớp Numeric nào cả!

Hãy xem the docs. Nó chỉ đơn giản là một lớp cơ sở. Bạn sẽ không bao giờ (tốt, nó sẽ rất khó xảy ra, anyway :)) sử dụng nó trực tiếp.

+2

Điều này sai. Nhiều classess Ruby không có phương thức 'new', xem: TrueClass, FalseClass, NilClass, Fixnum, Float, vv – horseyguy

+1

Eh, một chi tiết nhỏ. Một lớp có thể định nghĩa phương thức 'mới' nếu nó muốn. Số không phải vì bạn có nghĩa là để có thể phân lớp nó và sử dụng nó như là một cơ sở chính mình. 'TrueClass' và những thứ tương tự không được sử dụng như thế này. – rfunduk

+1

rằng 'chi tiết nhỏ' làm cho tuyên bố táo bạo này của bạn hoàn toàn không hợp lệ: "Vì vậy, để không có một nhà xây dựng cho số sẽ có nghĩa là không có lớp số ở tất cả!" – horseyguy

1

Bạn sẽ không bao giờ sử dụng lớp số theo cách đó. Đây là lớp cơ sở cho tất cả các kiểu số trong Ruby.

lớp số Ruby tạo thành một đầy đủ tháp số, cung cấp nhiều loại cơ quan đại diện các con số và đại diện số.

Nguồn: Ruby Tips: Numeric Classes

+3

Nhưng bạn không giải thích tại sao 'mới' vẫn tồn tại :) – horseyguy

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