Scusate se duplicato (non ho trovato esso)"==" in Ruby vale sempre l'uguaglianza?
Questo è solo per confermare che Ruby dell'operatore ==
esegue sempre un confronto di uguaglianza. I.e.
a == b
confronto di un valore rispetto al valore di b, invece che, come Java, sia che puntano allo stesso oggetto in memoria (per quest'ultima cosa, in Ruby, è necessario utilizzare a.object_id == b.object_id
).
Così, di conseguenza è sicuro di confrontare i valori di stringa con == in Ruby (anche se non è sicuro di farlo in Java)
Grazie
Edit:
La domanda è sul comportamento == predefinito per qualsiasi oggetto Ruby, in quanto può ingannare i programmatori Java-C-C++ assumendo un == b confronta i riferimenti stessi, non i contenuti di riferimento.
Ad ogni modo, è possibile controllare questo codice, utilizzando stringhe
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
Modifica 2.
Così, in Ruby, il confronto
a == b
controlli A e valori di b
ma, l'assegnazione
a = b
non copia i valori, ma fa un e punto b per lo stesso oggetto!
continuando con il codice precedente
puts one.object_id
puts two.object_id
puts " and now "
one = two
puts one.object_id
puts two.object_id
Sì. http://stackoverflow.com/questions/1710369/most-concise-way-to-test-string-equality-not-object-equality-for-ruby-strings – nneonneo
Il link fa riferimento non è un duplicato di questa domanda ... –
Sì, la prima cosa che ho capito è che in Ruby l'operatore '==' e la funzione 'equals' sono invertiti a ciò che è previsto in C come le lingue. – EliuX