Czy jest coś bardziej idiomatycznego niż poniższe?
foo.class == String
ruby
idioms
typechecking
davidchambers
źródło
źródło
is_a?
jest w rzeczywistości bardziej odpowiednim idiomem (a często sprawdzanie pisania na klawiaturze, o którym wspomina Andrew Grimm, jest jeszcze lepsze). Ścisłe porównanie klas to zwykle zapach kodu. en.wikipedia.org/wiki/Liskov_substitution_principleString
, ale także zInteger
iFloat
. Czy to też działaDecimal
? (wzniosły interpreter tekstu inaczej podkreśla składnię,Decimal
co sprawia, że jestem podejrzliwy)Można by powiedzieć, że bardziej typowe byłoby podejście do pisania na klawiaturze
to_str
wskazuje, że klasa obiektu może nie być rzeczywistym potomkiem String, ale sam obiekt jest bardzo podobny do ciągu (stringy?).źródło
foo
albo będzietrue
,false
albo ciąg wanilia, ale to dobrze, aby dowiedzieć się więcej ogólnych rozwiązań.to_str
, czyto_s
? Te dwa są nieco inne.Możesz to zrobić:
A bardziej ogólnie:
źródło
kind_of
bardziej ogólne? Wydają się być synonimem:is_a
.instance_of?
zamiastis_a?
.lub
jeśli obchodzi cię tylko to, że pochodzi z
String
jakiegoś miejsca w łańcuchu dziedziczeniaźródło
Oprócz innych odpowiedzi, Class definiuje metodę === do sprawdzania, czy obiekt jest instancją tej klasy.
źródło
Myślę, że lepszym sposobem jest stworzenie metod predykatów. Spowoduje to również zapisanie „pojedynczego punktu kontroli”.
Im bardziej kaczkowy sposób pisania;)
źródło
"string".is_a?(String)
. Wygląda na to, że odkrywasz koło na nowo. Jest teżclass
,instance_of
,kind_of
, itd ... zły pomysł, aby małpa patchObject
klasa, nie wspominając, że to niepotrzebny.pre_check("test".is_string?)
Teraz wymagania twojego projektu ulegną zmianie i każdy łańcuch z trzema lub więcej znakami nie jest już zdefiniowany jako String (wiem, że jest niezwykły;)) Teraz możesz łatwo zmienić własną metodę.