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