"Нет значения" трактуется как nil
во многих местах в Ruby:
-> { break }.()
#⇒ nil
42 if false
#⇒ nil
То же самое и здесь: круглые скобки являются избыточными, но они поддерживают блок кода, пустой, следовательно, он обрабатывается как nil
.
С Ruby 2.6+ вы можете проверить AST самостоятельно:
main > RubyVM::AbstractSyntaxTree.parse('()')
#⇒ (SCOPE@1:0-1:2 tbl: [] args: nil body: (BEGIN@1:1-1:1 nil))