lopopolo · GitHub

MRI

MRI requires values passed to Hash#default_proc= to be of type Proc.

$ irb
[3.4.2] > h = {}
=> {}
[3.4.2] > h.default_proc = 123
(irb):2:in 'Hash#default_proc=': wrong default_proc type Integer (expected Proc) (TypeError)
        from (irb):2:in '<main>'
        from <internal:kernel>:168:in 'Kernel#loop'
        from /Users/lopopolo/.local/share/mise/installs/ruby/3.4.2/lib/ruby/gems/3.4.0/gems/irb-1.14.3/exe/irb:9:in '<top (required)>'
        from /Users/lopopolo/.local/share/mise/installs/ruby/3.4.2/bin/irb:25:in 'Kernel#load'
        from /Users/lopopolo/.local/share/mise/installs/ruby/3.4.2/bin/irb:25:in '<main>'
[3.4.2] > h[:a]
=> nil

mruby

mruby permits any object to be assigned as the default proc and then throws NoMethodError later when invoking it.

$ bin/mirb
mirb - Embeddable Interactive Ruby Shell
> h = {}
 => {}
> h.default_proc = 123
 => 123
> h[:a]
undefined method 'call' for Integer (NoMethodError)
> h.default_proc = nil
 => nil
> h[:a]
 => nil

Read the original on github.com ↗