Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Time objects fail to round-trip with equality

Aperta
#402 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
ruby
Ambito
backend

Direzione di ricerca

Esegui lo script Ruby fornito e analizza il round trip YAML.dump/YAML.load per gli oggetti Time, confrontando Time#==, Time#to_f e Time#nsec come mostrato. Il lavoro è completato quando le istanze Time originale e caricata risultano uguali, incluso il caso dei secondi frazionari riportato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

I ran the following script:

require 'yaml'

puts Psych::VERSION

def compare(time)
  dumped = YAML.dump(time)
  loaded = YAML.load(YAML.dump(time))
  equal = loaded == time

  pp(
    original: time,
    loaded: loaded,
    equal: equal,
#    nsec: { original: time.nsec, loaded: loaded.nsec, equal: time.nsec == loaded.nsec }
    float: { original: time.to_f, loaded: loaded.to_f, equal: time.to_f == loaded.to_f }
  )
end

compare(Time.new(2002, 4, 5, 6, 7, 8.9992321))
compare(YAML.load YAML.dump Time.new(2002, 4, 5, 6, 7, 8.9992321))

And got the following output:

3.0.2
{:original=>2002-04-05 06:07:08 -0800,
 :loaded=>2002-04-05 06:07:08 -0800,
 :equal=>false,
 :float=>
  {:original=>1018015628.999232, :loaded=>1018015628.9992322, :equal=>false}}
{:original=>2002-04-05 06:07:08 -0800,
 :loaded=>2002-04-05 06:07:08 -0800,
 :equal=>true,
 :float=>
  {:original=>1018015628.9992322, :loaded=>1018015628.9992322, :equal=>true}}

I would expect both Time instances to compare equal to their dumped & loaded counterpart, but the first does not. By inspection, we can see that the Time#to_f of the original & loaded instances are different, which I'd guess is what's breaking Time#==. Curiously, the Time#nsec property is preserved properly.

Lingua principale
Ruby
Stelle
597
Fork
223
Merge medio
14m
PR unite (30g)
1

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ruby/psych

Tutte le issue di ruby/psych

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.