Какая разница в выражениях и выражениях в Ruby? - PullRequest
6 голосов
/ 09 марта 2012

Я знаю в Ruby, почти все это выражение. Даже в других языках, таких как оператор if-else, оператор case, оператор присваивания, оператор цикла, является выражением в Ruby.

Итак, я хочу знать с точки зрения Ruby, в чем разница между выражением и выражением?

Ответы [ 3 ]

5 голосов
/ 09 марта 2012

Нет никакой разницы между выражениями и операторами Ruby.Все оценивается как значение, поэтому все является выражением.

2 голосов
/ 06 июня 2016

С Руководство по взлому Ruby :

Кроме того, определения функций и классов, как правило, представляют собой операторы, однако в таких языках, как Lisp и Scheme, поскольку все является выражением, в первую очередь они не имеют операторов. В этом отношении Ruby близок к дизайну Lisp.

Это правила грамматики оператора, где вы можете увидеть (что-то вроде) оператор в реализации языка. Обратите внимание на правило expr , которое означает, что stmnt может быть expr. Expr не может быть stmt.

stmt        : kALIAS fitem  fitem
            | kALIAS tGVAR tGVAR
            | kALIAS tGVAR tBACK_REF
            | kALIAS tGVAR tNTH_REF
            | kUNDEF undef_list
            | stmt kIF_MOD expr_value
            | stmt kUNLESS_MOD expr_value
            | stmt kWHILE_MOD expr_value
            | stmt kUNTIL_MOD expr_value
            | stmt kRESCUE_MOD stmt
            | klBEGIN ‘{’ compstmt ‘}’
            | klEND ‘{’ compstmt ‘}’
            | lhs ‘=’ command_call
            | mlhs ‘=’ command_call
            | var_lhs tOP_ASGN command_call
            | primary_value ‘[’ aref_args ‘]’ tOP_ASGN command_call
            | primary_value ‘.’ tIDENTIFIER tOP_ASGN command_call
            | primary_value ‘.’ tCONSTANT tOP_ASGN command_call
            | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call
            | backref tOP_ASGN command_call
            | lhs '=' mrhs_basic
            | mlhs '=' mrhs
            | expr
1 голос
/ 09 марта 2012

Думайте о выражениях как о небольших частях предложения. Думайте об утверждении как о законченном предложении или мысли. Одна строка в вашем методе или цикле может быть выражением, и объединение этих выражений в замкнутый цикл или метод может рассматриваться как выражение.

Это более или менее концептуально субъективно. Как правильно указал Никлас Б. (и вы правильно заметили).

Есть ли проблема, с которой вы имеете дело напрямую, которая заставила вас разобраться в этом?

Вы также услышите, как люди говорят: «все в рубине - это объект», а не все - это выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...