Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Time objects fail to round-trip with equality

Offen
#402 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
ruby
Bereich
backend

Rechercherichtung

Führen Sie das bereitgestellte Ruby-Skript aus und untersuchen Sie den YAML.dump/YAML.load-Roundtrip für Time-Objekte, wobei Sie Time#==, Time#to_f und Time#nsec wie gezeigt vergleichen. Als erledigt gilt die Aufgabe, wenn die ursprünglichen und geladenen Time-Instanzen gleich sind, einschließlich des gemeldeten Falls mit Bruchteilen einer Sekunde.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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.

Vorherrschende Sprache
Ruby
Sterne
596
Forks
224
Ø Merge
8 Std. 38 Min.
Gemergte PRs (30 T.)
2

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus ruby/psych

Alle Issues in ruby/psych

Ähnliche Issues

Weitere Issues zu Ruby

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.