Przepraszam, jeśli zduplikowano (nie znalazłem)Czy "==" w Ruby zawsze ceni sobie równość?
To tylko w celu potwierdzenia, że operator Ruby ==
zawsze wykonuje porównanie równości. tj.
a == b
porównuje się jego wartość na wartość B, zamiast niż, jak Java, czy wskazują one na tym samym obiekcie w pamięci (do tej ostatniej rzeczy, w Ruby, należy użyć a.object_id == b.object_id
).
Tak więc, w konsekwencji jest to bezpieczne, aby porównać wartości ciągów z == w Ruby (chociaż nie jest to bezpieczne w Javie)
Dzięki
Edycja:
Pytanie dotyczy domyślnego zachowania == dla dowolnego obiektu Ruby, ponieważ może wprowadzać w błąd programistów Java-C-C++ zakładając, że == b porównuje same referencje, a nie zawartość referencyjną.
W każdym razie, można sprawdzić ten kod, za pomocą strun
one="hello"
two="he"
two << "llo"
if one == two
puts "surprise: comparing values, not like in Java"
end
if not one.object_id == two.object_id
puts "obvious: do this to compare references"
end
Edycja 2.
Więc w Ruby, porównania
a == b
kontrole A i wartości B
ale przypisanie
a = b
nie kopiuje wartości, ale sprawia, że i punktu B do ten sam obiekt!
kontynuacją poprzedniego kodu
puts one.object_id
puts two.object_id
puts " and now "
one = two
puts one.object_id
puts two.object_id
Tak. http://stackoverflow.com/questions/1710369/most-concise-way-to-test-string-equality-not-object-equality-for-ruby-strings – nneonneo
Odnośny link nie jest duplikatem to pytanie ... –
Tak, pierwszą rzeczą, jaką sobie uświadomiłem, jest to, że w Ruby operator '==' i funkcja 'equals' są odwrócone do tego, czego oczekuje się w językach podobnych do języka C. – EliuX