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

Nie mogę sobie wyobrazić przypadku użycia tego. Czy możesz?Dlaczego Ruby ma Numeric.new?

+3

Masz na myśli 'Numeric.new' zamiast' NumeriC# new' .... '#' oznacza 'instance method' (ale w tym przypadku 'new' jest metodą klasową) – horseyguy

+0

Nie wiem. Tytuł poprawiony. Dzięki. – steenslag

Odpowiedz

3

Klasa Class definiuje metody new wystąpienia. I tak metoda klasy new na Numeric jest po prostu wstrzymaniem - nie robi nic - pomyśl o tym, jako o jednym z tych szczątkowych narządów, które zwierzęta dziedziczą po odległym przodku - jak dodatek do ludzi.

Należy zauważyć, że podklasy Numeric takich jak Fixnum i Float i ich krewni explictly Undefine metody new. Sądzę, że po prostu nie zawracali sobie głowy niezdefiniowaniem tego, ponieważ bezpośrednie instancje tej klasy nigdy nie istnieją i nie szkodzą jej.

+0

Tak, tak się dowiedziałem. odtwarzane w irb, próbując Float.new ("NaN"), niepowodzenie (NoMethodError). Przechodzę do Numeric.new ("NaN"), kończąc na bezużytecznej (?) Numerycznej. – steenslag

1

Wszystko w Ruby to obiekt, nawet klasy. Tak więc nie posiadanie konstruktora dla Numeric oznaczałoby, że w ogóle nie ma klasy Numeric!

Spójrz na the docs. To po prostu klasa bazowa. Nigdy byś (no, w każdym razie byłaby bardzo mało prawdopodobna :)) użyj go bezpośrednio.

+2

To jest niewłaściwe. Wiele klas Ruby nie ma metody "new", zobacz: TrueClass, FalseClass, NilClass, Fixnum, Float, itp. – horseyguy

+1

Eh, drobny szczegół. Klasa może niezdefiniować, że jest to metoda "nowa", jeśli chce. Numeric nie jest, ponieważ masz na celu jej podklasę i użyć go jako podstawy. 'TrueClass' i podobne nie mają być używane w ten sposób. – rfunduk

+1

, że "drobny szczegół" sprawia, że ​​to odważne stwierdzenie jest całkowicie nieważne: "Aby nie mieć konstruktora liczbowego, oznaczałoby to, że w ogóle nie ma klasy liczbowej!" – horseyguy

1

Nigdy nie użyjesz klasy numerycznej w ten sposób. Jest to klasa podstawowa dla wszystkich typów liczbowych w Ruby.

klas numerycznych Ruby tworzą pełny numeryczną wieży, zapewniając wiele rodzajów reprezentacjami liczb i reprezentacje numerycznych.

Źródło: Ruby Tips: Numeric Classes

+3

Ale nie wyjaśniłeś, dlaczego 'nowy' wciąż istnieje :) – horseyguy