Dlaczego występują następujące różnice?Równanie daty Rubiego nie zwraca oczekiwanej wartości prawdy
Time.now.end_of_day == Time.now.end_of_day - 0.days # false
Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true
Dlaczego występują następujące różnice?Równanie daty Rubiego nie zwraca oczekiwanej wartości prawdy
Time.now.end_of_day == Time.now.end_of_day - 0.days # false
Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true
Ponieważ liczba nanosekund jest inna
ruby-1.9.2-p180 :014 > (Time.now.end_of_day - 0.days).nsec
=> 999999000
ruby-1.9.2-p180 :015 > Time.now.end_of_day.nsec
=> 999999998
Osobiście uważam, że błąd w '# end_of_day'. Nanosekundy istnieją, oczywiście, ale jeśli end_of_day jest kilka nanosekund od końca dnia, to nie jest, ermm, koniec dnia;) – d11wtq
Ale kiedy odejmie się od niego 0.days, to jest nawet dalej od końca dnia. Więc jeśli jest błąd, to raczej w "dniach" niż w 'end_of_day'. – Mischa
jak Mischa że czasy różnią się nanosekund. Here to artykuł o obejściach i poprawkach do zrobienia tego w Railsach, specjalnie do testów takich jak Ty.
Z pozornie najprostszym podejściem jest zaokrąglenie czasów do sekund przez dodanie .to_i
, ale są też inne alternatywy.
Aby rozwinąć na Mischa za odpowiedź:
Z docs on the Time object: „Czasy mogą mieć frakcję Bądź świadomy tego faktu przy porównywaniu razy ze sobą czasy, które są pozornie równe, gdy wyświetlane mogą być różne w porównaniu.. "
W ten sposób pierwsze obliczenia porównują dwa obiekty Time, które różnią się na poziomie nanosekundy, ale drugie obliczenie przekształca oba obiekty Time w ciągi, które ignorują nanosekundy i zwracają wartość true, ponieważ obie reprezentacje String są zgodne.
Co oznacza "Time.now.end_of_day.to_s == Time.now.end_of_day.to_s - ((1 - 1) * 7) .days.to_s' return than? A może 'Time.now.end_of_day.to_s == (Time.now.end_of_day - ((1 - 1) * 7) .days) .to_s' –
@Phrogz, który tego nie naprawi. Myślę, że Jorge ma rację, musisz użyć 'to_i'. – Mischa
@Mischa Jak interesujące; dzięki za poprawienie mnie. – Phrogz