a = Numeric.new # doesn't take an argument
Nie mogę sobie wyobrazić przypadku użycia tego. Czy możesz?Dlaczego Ruby ma Numeric.new?
a = Numeric.new # doesn't take an argument
Nie mogę sobie wyobrazić przypadku użycia tego. Czy możesz?Dlaczego Ruby ma Numeric.new?
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.
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
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.
To jest niewłaściwe. Wiele klas Ruby nie ma metody "new", zobacz: TrueClass, FalseClass, NilClass, Fixnum, Float, itp. – horseyguy
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
, ż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
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
Ale nie wyjaśniłeś, dlaczego 'nowy' wciąż istnieje :) – horseyguy
Masz na myśli 'Numeric.new' zamiast' NumeriC# new' .... '#' oznacza 'instance method' (ale w tym przypadku 'new' jest metodą klasową) – horseyguy
Nie wiem. Tytuł poprawiony. Dzięki. – steenslag