Open
Description
I think this bug is a serious problem. every time BatchLoader.for().batch
is called, a new object of nil
will be returned by default. this can cause some weird bugs in Ruby and is a waste of memory. you can reproduce it as the following:
➜ ~ irb
irb(main):001:0> require 'batch-loader'
=> true
irb(main):002:0> a = nil
=> nil
irb(main):003:0> b = BatchLoader.for(1).batch do |ids, loader|
ids.each { |id| loader.call(id, nil) }
end
=> nil
irb(main):004:0> a.object_id
=> 8
irb(main):005:0> b.object_id # why 'b' is a new object of `nil`?
=> 200
irb(main):006:0> b = BatchLoader.for(2).batch do |ids, loader|
ids.each { |id| loader.call(id, nil) }
end
=> nil
irb(main):007:0> b.object_id # a new object of `nil` again
=> 220
irb(main):008:1* unless b
irb(main):009:1* puts 1 # this should be called, but it was skipped because of a new object of `nil`
irb(main):010:0> end
=> nil
irb(main):011:1* unless a
irb(main):012:1* puts 1
irb(main):013:0> end
1
=> nil
env: batch-loader (2.0.1)
this bug result in some weird behaviors that unless b
cannot be evaluated as true
and it's hard to debug, it confused me a lot.
Metadata
Metadata
Assignees
Labels
No labels