Почему () возвращает ноль в Ruby? - PullRequest
0 голосов
/ 24 января 2019

В Ruby при запуске:

()
=> nil

Вывод nil.Я не понимаю, какой механизм Ruby это использует.

Я думал, что он звонил self(), но self() возвращает syntax error, unexpected '(', expecting end-of-input.

Почему это возвращает nil, и какую языковую функцию он использует?

1 Ответ

0 голосов
/ 24 января 2019

"Нет значения" трактуется как 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))
...