Project

General

Profile

Actions

Bug #16914

closed

Hash.new with `default_proc` returns this `default_proc` instead of calling it sometimes

Added by beauraF (Florent Beaurain) almost 4 years ago. Updated over 3 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
[ruby-core:98523]

Description

Hello,

First of all, I want to apologize because this bug report will not be realized at all in good shape. I encounter this problem on a rails application currently in production, but I am unable to reproduce it. I failed to provide you a script to reproduce. I'm very sorry. But.. maybe it will ring a bell to someone.


So, I have a hash, built this way:

messages
  .each_with_object(Hash.new { [] }) { ... }
  .transform_values { ... }

{
  [:appointment, {:import_identifier=>"TVER111111114^ORBIS"}]=>#<ExternalSyncMessage id: 82, ... >,
  [:appointment, {:import_identifier=>"TVER111111115^ORBIS"}]=>#<ExternalSyncMessage id: 84, ... >,
  [:appointment, {:import_identifier=>"TVER111111116^ORBIS"}]=>#<ExternalSyncMessage id: 85, ... >, 
  [:appointment, {:id=>"30"}]=>#<ExternalSyncMessage id: 86, ... >,
  [:appointment, {:import_identifier=>"TVER111111111^ORBIS"}]=>#<ExternalSyncMessage id: 79, ... >,
  [:appointment, {:import_identifier=>"TVER111111112^ORBIS"}]=>#<ExternalSyncMessage id: 80, ... >,
}

Here is the result in ruby 2.6.6p146 (2020-03-31 revision 67876) [x86_64-darwin19] when I try to access it:

hash[[:appointment, {:import_identifier=>"TVER111111114^ORBIS"}]]
=> #<ExternalSyncMessage id: 82, ... >

hash[[:appointment, {:import_identifier=>"TVER111111117^ORBIS"}]]
=> nil

Here is the result in ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19] when I try to access it:

hash[[:appointment, {:import_identifier=>"TVER111111114^ORBIS"}]]
=> #<ExternalSyncMessage id: 82, ... >

hash[[:appointment, {:import_identifier=>"TVER111111117^ORBIS"}]]
=> #<Proc:0x00007fdc59a6e310 /Users/beauraf/Code/doctolib/doctolib/app/services/sync/farming_support/retry_inbound_messages.rb:75>

hash[[:appointment, {:import_identifier=>"TVER111111117^ORBIS"}]].call
=> []

note: retry_inbound_messages.rb:75 => .each_with_object(Hash.new { [] }) { ... }


So, if I'm right, the result on ruby 2.6, was not the good one but acceptable one on my side. On ruby 2.7, we're close to the good result, but we have to call the proc manually, which causes a lot of worries on my side.

At your entire disposal, if I can help in any way.


Related issues 1 (0 open1 closed)

Is duplicate of Ruby master - Bug #16498: Hash#transform_values in 2.7.0 sets new hash's default to old hash's default_procClosedActions
Actions #1

Updated by beauraF (Florent Beaurain) almost 4 years ago

  • Subject changed from Hash.new with a block returns a proc sometimes to Hash.new with `default_proc` returns this `default_proc` instead of the result sometimes
Actions #2

Updated by beauraF (Florent Beaurain) almost 4 years ago

  • Subject changed from Hash.new with `default_proc` returns this `default_proc` instead of the result sometimes to Hash.new with `default_proc` returns this `default_proc` instead of calling it sometimes
Actions #3

Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

  • Related to Bug #16498: Hash#transform_values in 2.7.0 sets new hash's default to old hash's default_proc added
Actions #4

Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

  • Related to deleted (Bug #16498: Hash#transform_values in 2.7.0 sets new hash's default to old hash's default_proc)
Actions #5

Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

  • Is duplicate of Bug #16498: Hash#transform_values in 2.7.0 sets new hash's default to old hash's default_proc added
Actions #6

Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

  • Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN to 2.5: DONTNEED, 2.6: DONTNEED, 2.7: REQUIRED
Actions #7

Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

  • Status changed from Open to Closed

Updated by nagachika (Tomoyuki Chikanaga) over 3 years ago

  • Backport changed from 2.5: DONTNEED, 2.6: DONTNEED, 2.7: REQUIRED to 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONE

ruby_2_7 05c4c88767b54808cd1459a1d6da11179c422cfa merged revision(s) 1b4d406e3a04032b6d01e92b6d184a16945c6ac3.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0