ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:98523] [Ruby master Bug#16914] Hash.new with a block returns a proc sometimes
@ 2020-05-26  9:45 beaurain.florent
  2020-07-26  9:32 ` [ruby-core:99347] [Ruby master Bug#16914] Hash.new with `default_proc` returns this `default_proc` instead of calling it sometimes nagachika00
  0 siblings, 1 reply; 2+ messages in thread
From: beaurain.florent @ 2020-05-26  9:45 UTC (permalink / raw)
  To: ruby-core

Issue #16914 has been reported by beauraF (Florent Beaurain).

----------------------------------------
Bug #16914: Hash.new with a block returns a proc sometimes
https://bugs.ruby-lang.org/issues/16914

* Author: beauraF (Florent Beaurain)
* Status: Open
* Priority: Normal
* ruby -v: ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
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:

```ruby
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:

```ruby
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:

```ruby
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.



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [ruby-core:99347] [Ruby master Bug#16914] Hash.new with `default_proc` returns this `default_proc` instead of calling it sometimes
  2020-05-26  9:45 [ruby-core:98523] [Ruby master Bug#16914] Hash.new with a block returns a proc sometimes beaurain.florent
@ 2020-07-26  9:32 ` nagachika00
  0 siblings, 0 replies; 2+ messages in thread
From: nagachika00 @ 2020-07-26  9:32 UTC (permalink / raw)
  To: ruby-core

Issue #16914 has been updated by nagachika (Tomoyuki Chikanaga).

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.

----------------------------------------
Bug #16914: Hash.new with `default_proc` returns this `default_proc` instead of calling it sometimes
https://bugs.ruby-lang.org/issues/16914#change-86741

* Author: beauraF (Florent Beaurain)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
* Backport: 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONE
----------------------------------------
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:

```ruby
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:

```ruby
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:

```ruby
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.



-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-07-26  9:32 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-26  9:45 [ruby-core:98523] [Ruby master Bug#16914] Hash.new with a block returns a proc sometimes beaurain.florent
2020-07-26  9:32 ` [ruby-core:99347] [Ruby master Bug#16914] Hash.new with `default_proc` returns this `default_proc` instead of calling it sometimes nagachika00

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).