Jaka jest różnica między == a ===? Których należy użyć, kiedy?Operatory porównania Ruby? == vs. ===
Odpowiedz
==
służy do równości w instrukcji warunkowych jak if
, unless
itp ===
służy do określenia równości w case
wypowiedzi.
Jako przykład, 10 nie jest równe 1..20, ale mieści się w tym zakresie. Możesz więc chcieć umieścić zakres w swoim oświadczeniu o sprawie i go wybrać. Zwróć też uwagę, że instrukcje case tłumaczą się na b === a w instrukcjach takich jak 'case a, gdy b to true end'' –
Obie są po prostu metodami wywoływanymi na obiektach. Oznacza to, że obiekty decydują, co znaczy co. W Rubim istnieją jednak konwencje dotyczące tego, jak są one różne. Zwykle ==
jest bardziej rygorystyczne niż ===
- prawie zawsze jest prawdziwe, jeśli jest a == b
. Najlepszym miejscem na przeczytanie tego jest http://ruby-doc.org/core/classes/Object.html. Przewiń w dół do różnych sekcji o numerach ==
i ===
. Oto niektóre z konwencjami wiem o:
==
po nałożeniu na zwykłyObject
s, będzie tylko prawda, jeśli ktoś jest dokładnie taka sama jak inne - jeśli są one przechowywane w miejscu samej pamięci (ta jak działa wewnętrznie Ruby). Jeśli argumenty są typu innego niż Object, ta metoda będzie zwykle nadpisywana.equal?
jest podobna do==
dla zwykłychObject
s, ale nigdy nie zostanie nadpisana przez podklasy.===
służy do:- z
is_a?
alternatywa, do tyłu.String === 'str'
jest prawdziwe. - dopasowanie wyrażeń regularnych.
/s[at]r*/ === 'str'
jest prawdziwe.
- z
Można znaleźć szczególne znaczenie ===
dla różnych klas w dokumentacji dla tych klas, na przykład wersja Range
jest tutaj (synonim include?
): http://ruby-doc.org/core/classes/Range.html#M000691
Dobry przykład przesłaniania' == 'tak, że robi to, czego oczekujesz (prawdopodobnie) jest ciągiem. Porównaj '==' i '.equal' dla literału ciągu i zmiennej wskazującej na" ten sam "ciąg znaków. – Telemachus
- 1. Ruby gem dla porównania tekstu
- 2. Operatory porównania i "jest" - pierwszeństwo operatora w python?
- 3. C# operatory logiczne - normalne vs zwarcie
- 4. Ruby datetime odpowiednie do porównania mysql
- 5. Ruby vs. Ruby On Rails
- 6. Ruby wysłać vs __send__
- 7. Ruby: Struct vs Initialize
- 8. Ruby: define_method vs. def
- 9. backtick vs system ruby
- 10. Ruby on Rails before_filter vs initialized ruby
- 11. Operatory blokujące serwer sql
- 12. Dlaczego operatory porównania std :: vector i std :: string są zdefiniowane jako funkcje szablonu?
- 13. W jaki sposób operatory porównania Python < and > pracują z nazwą funkcji jako operandem?
- 14. Czy istnieje interfejs, który włącza><i wszystkie inne operatory porównania?
- 15. Jak działają operatory ze wskaźnikami?
- 16. Ruby Symbole vs smyczki mieszań
- 17. p vs puts w Ruby
- 18. wydajność: ruby CSV.foreach vs CSV.parse
- 19. Ruby on Rails vs. Django
- 20. Ruby Regexp: + vs *. szczególne zachowanie?
- 21. Ruby left vs right recursion
- 22. Python yield vs Ruby yield
- 23. Wyrażenie regularne - Ruby vs Perl
- 24. Ruby - leksykalna zakres vs dziedziczenia
- 25. Ruby: ProC# call vs yield
- 26. Zapytanie DynamoDB z operatorami porównania
- 27. PHP: Datetime :: Diff wyniki porównania
- 28. Operatory przeciążające w C++
- 29. NHibernate.LINQ Obsługiwane operatory
- 30. Operatory globalne i polimorfizm
Jest naprawdę solidne odpowiedź na to w [Jaka jest różnica między równymi ?, eql ?, === i ==?] (http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-and) –