娃娃鴨學Ruby-5、空白符

來源:互聯網
上載者:User

空白符包括:空格符、定位字元和分行符號,它們本身並不是標記,而是用於分隔不同的標記,以免這些標記合并成一個標記。

注意:
有時候的空白符是必須的,還有一些實際上是被禁止的。

1、作為語句終結符的分行符號
C和Java每個語句必須以分號結尾。在Ruby中,也可以用分號來終結語句,但這並不是必須的。只有當你試圖在一行代碼裡面放置多條語句時,才須要使用分號分隔它們。除此之外,依照慣例分號都是被省略掉的。

Ruby解譯器的智能:
在沒有顯式的分號結尾下,Ruby解譯器自己會找何處結尾。
如果一行Ruby代碼是一個句法完整的語句,那麼Ruby就將該行結尾的分行符號看成是此語名的終結符,否則Ruby將繼續解析下一行的語句,直到得到一個完整的語句。
有智能就會存在問題:
如果語句分布多行,就可能會被錯誤解釋。
total=x+
y
----------------------------------------
Ruby會正確解釋
但是如果是
total=x
+y
----------------------------------------
會被解釋成兩個運算式,total=x 將x的值賦給total,下行+y沒什麼意思,但是是完成的運算式。

return 和break語句可能會解釋不正確。

總結:
在以下幾種情況下可以放心換行
1)、一個操作符之後換入分行符號,如
puts x+
y
2)、在方法調用的句點之後插入分行符號
Foo.new.
say_hello
3)、在數組或雜湊表字面量裡,用於分隔各元素的逗號
[1,2,3] 或{x=>1,y=>1}
插入如下換行:
[1,
2,
3]
{x=>1,
y=>1}
以上兩種情況不會出現問題
4)、可以用一個"/"來對分行符號進行轉義,這樣就可以避免Ruby自動終結該語句了:
var total=first_long_variable_name+second_long_variable_name /
+third_long_variable_name # note no statement terminator above
在Ruby 1.9裡,關於語句終結符的規則發生了一點小變化:如果一行代碼的第一個非空白的字元是一個句點,那麼這一行將被當成上一行的延續,而且在該行語句之前的那個分行符號將不被當作語句終結符。
animals=Array.new
.push("dog") #ruby 1.8 中不行
.push("cow")
.push("cat")
.sort

2、空格符與方法調用
Ruby的文法允許在特定環境下與方法調用相關的圓括弧可以被省略,這使Ruby的方法使用起來就好象它們是語句一樣。
優雅性??
危害性??相輔相成
f(3+2)+1
f (3+2)+1
難道這兩者有區別?空格不被忽略
----------------------------------------
是有區別的在Ruby中, f(3+2)+1將(3+2)的結果5傳遞給方法f,然後結果上加1.
而f (3+2)+1則為:方法名後面有空格,在空格符之後出現的圓括弧括起來的運算式3+2,先計算,然後將(3+2)+1的結果傳給函數f

f(3+2)+1  =>相當於f(5)+1
f (3+2)+1 =>相當於f(6)
其中的區別,這樣說來就明顯了。

如果在執行代碼時使用 -w 參數開啟警告,Ruby將在它碰到具有二義性的代碼時發出警告。
解決方案:
× 永遠不要在方法名和其後的左圓括弧之間留白
× 如果一個方法的第一個參數以圓括弧開頭,那麼在此方法的調用中,請一直使用圓括弧,比如f((3+2)+1)
×   請一直使用Ruby解譯器的-w選項,這樣它就會在你忘記了上述規則時發出警告。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.