l.callで呼び出せる理由はなんとなくわかるのですが、l[]で呼び出せる理由がわかりません。
何故関数が呼び出されるのでしょうか?

irb(main):001:0> l = lambda{puts "lambda"}
=> #<Proc:0x00007ff619093dc0@(irb):1>
irb(main):002:0> l.call
lambda
=> nil
irb(main):003:0> l[]
lambda
=> nil