2012-03-09 74 views
5

我知道Ruby,幾乎所有東西都是表達式。即使是其他語言的語句,例如if-else語句,case語句,賦值語句,循環語句也是Ruby中的表達式。Ruby中的語句和表達有什麼區別?

所以我想從Ruby的觀點來看,語句和表達有什麼區別?

+2

正如您注意的那樣,Ruby中沒有語句,所以這個問題沒有任何意義。 – 2012-03-09 15:28:22

回答

4

Ruby和表達式之間沒有區別。所有東西都是一個表達式。

1

將表達式看作是句子的小部分。把這個陳述想成是完成的句子或思想。你的方法或循環中的一行可能是一個表達式,並且這些表達式集成到一個閉環或方法中可以被認爲是一個聲明。

這在概念上或多或少是主觀的。正如尼克拉斯B.正確指出的(你正確地注意到)。

是否有一個問題,您直接處理,讓你看着這個?

你也會聽到人們說「紅寶石中的一切都是對象」,而不是一切都是表達。

+0

我想說,主要的概念區別是東西的價值是使用還是丟棄。 – 2012-03-09 15:36:57

2

Ruby hacking guide

此外,函數和類定義通常然而,在語言,如Lisp和Scheme語句,因爲一切都是表達式,他們沒有在第一時間陳述。 Ruby在這方面接近Lisp的設計。

這些是語句的語法規則,您可以在其中看到(排序)語言實現中的語句。注意expr規則,這意味着stmnt可能是一個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 
相關問題