Time objects fail to round-trip with equality
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 45/100
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
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus ruby/psych
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
Documentation
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
-
Psych.dump raises Encoding::CompatibilityError for UTF-16/UTF-32 stringsEvtl. vergeben @Halvanhelv hat das vor 46 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 55/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 68/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 52/100
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
up-for-grabs/up-for-grabs.net#6330 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 72/100
TheOdinProject/curriculum#31490 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
hotwired/turbo-rails#791 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
FinanceFlash/unvibecode#273 ·