-
Ruby的注釋以#開頭,並持續到該行結束。Ruby沒有/*...*/的C風格注釋。
-
如果#出現在字串或者Regex的字面量裡,則它是字串或者Regex的一部分,而不是注釋。
-
Ruby支援嵌入式注釋,以=begin開頭,以=end結尾。=begin和需要注釋的內容之間至少要有一個空格作為分界符。=end也是如此,而且=end所在行,整行都是被注釋掉的。=必須作為該行的第一個字元出現,前面連空格或定位字元都不可以有。
-
文檔化的注釋
-
字面量 就是直接出現在Ruby原始碼中的值,包括數字、字串、Regex、數組、雜湊值等。
-
標識符 即名字。Ruby用標識符對變數、類、方法等命名。
1)可以有字母、數字、底線組成,但不能以數字開頭。
2)以大寫字母開頭的標識符是常量。如果修改類似的標識符,會發出警告,但不是錯誤。
3)類和模組名必須以大寫開頭,否則報錯。
4)非常量多位元組標識符,以底線分割,而不是java下通常的“駝峰命名”。
-
Ruby是大小寫敏感的。
-
ASCII字元集下,Ruby規定了哪些字元是有效,哪些是無效的。ASCII字元集之外的所有字元都是Ruby標識符的有效字元。比如UTF-8中的乘號“×”。
-
標識符裡的標點符號
1)$ 開頭的變數是全域變數;
2)@ 開頭的變數是執行個體變數;
3)@@ 開頭的變數是類變數;
4)? 返回布爾值的方法的名字通常以問號結尾;
5)! 結尾的方法名,表明此方法會改變調用它的對象本身;
6)= 如果方法名以=結尾,則調用此方法時,可以省略此等號,這種方法通常被置於賦值操作符的左側。
-
保留字
| __LINE__ |
case |
ensure |
not |
then |
| __ENCODING__ |
class |
false |
or |
true |
| __FILE__ |
def |
for |
redo |
undef |
| BEGIN |
defined? |
if |
rescue |
unless |
| END |
do |
in |
retry |
until |
| alias |
else |
module |
return |
when |
| and |
elseif |
next |
self |
while |
| begin |
end |
nil |
super |
yield |
| break |
|
|
|
|
| =begin |
=end |
__END__ |
|
|
-
如果__END__單獨出現在一行(沒有前置或後置空白),則標示程式結束,即資料區的開始。
-
可以通過在保留字前加上@、@@、$,從而當做執行個體變數、類變數、全域變數來使用。此外還可以將關鍵字作為方法名,但這種方法名不能單獨出現在程式中,必須通過一個對象顯示的來調用。
-
Ruby的許多特性實際上是用Kernel、Module、Class和Object這幾個類的方法來實現的。建議將以下標識符當做保留字來處理。
1) 這些方法通常用於聲明或者關鍵字
| at_exit |
catch |
private |
require |
| attr |
include |
proc |
throw |
| attr_accessor |
lambda |
protected |
|
| attr_reader |
load |
public |
|
| attr_writer |
loop |
raise |
|
2) 這些方法通常用於全域方法
| Array |
chomp! |
gsub! |
select |
| Float |
chop |
iterator? |
sleep |
| Integer |
chop! |
load |
split |
| String |
eval |
open |
sprintf |
| URI |
exec |
p |
srand |
| abort |
exit |
print |
sub |
| autoload |
exit! |
printf |
sub! |
| autoload! |
fail |
putc |
syscall |
| binding |
fork |
puts |
system |
| block_given? |
format |
rand |
test |
| callcc |
getc |
readline |
trap |
| caller |
gets |
readlines |
warn |
| chomp |
gsub |
scan |
|
3)這些方法通常用於對象方法
| allocate |
freeze |
kind_of? |
superclass |
| clone |
frozen? |
method |
taint |
| display |
hash |
methods |
tainted? |
| dup |
id |
new |
to_a |
| enum_for |
inherited |
nil? |
to_enum |
| eql? |
inspect |
object_id |
to_s |
| equal? |
instance_of? |
respond_to? |
untaint |
| extend |
is_a? |
send |
|
-
空白符
1)Ruby中可以使用分號來結束語句,但通常都被省略。如果省略,則分行符號被視為語句的終結。
2)如果語句分布在多行,則應注意分行符號的位置。
total = x + y total = x+ y
3)以下情形不必擔心分行符號所引起的歧義。在操作符之後;在方法調用的句點之後;在數組或雜湊表字面量裡的分隔元素的逗號之後。
4)可以在分行符號之前加上“\”進行轉義,避免終結語句。
5)在Ruby1.9中,如果一行代碼的第一個非空白字元是“.”,則該行被認為是上一行的延續。這種風格很符合鏈式調用。
6)Ruby允許省略方法調用中的括弧,但應注意方法名和參數之間的空格。
f(3+2)+1# equals to f(5) + 1f (3+2)+1# equals to f(6)
因此不要在方法名和左括弧之間留白;如果參數是以圓括弧開頭,則整個方法調用一直要使用圓括弧;最好一直使用Ruby解譯器的-w選項。
-
塊(block)是一段與迭代器相關的代碼,以花括弧或者do、end來分隔。(塊的代碼多於一行的時候,使用do、end來分隔)
3.times {print "Ruby! "} 3.times do |x| print xend
-
體(Body)是一個語句列表,如類定義體,方法體迴圈體等。體從不使用花括弧分隔,而只使用關鍵字。
-
檔案結構
1)如果含有“shebang”注釋,則該注釋必須出現在檔案首行;
2)如果含有“coding”注釋,則應該出現在“shebang”下面一行;如果沒有“shebang”,則應出現在首行;
3)如果檔案包含一行代碼,且該行代碼只包含__END__標記,且標記前後均無空白符,則Ruby解譯器將停止對該檔案的處理。檔案餘下部分可以包含任何資料,而且程式可以通過IO流對象DATA對其進行讀取。
-
Ruby支援Unicode等其他字元集編碼;1.8中需要-Ku選項,1.9中只需在檔案開頭加上以下注釋(此注釋必須用ASCII字元編寫):
# coding: utf-8
1)coding後必須接一個冒號或等號,然後再接字元編碼名稱,該名稱不能包含空格,也不能包含底線和連字號以外的標點符號;
2)冒號和等號兩邊可以存在空格,字串coding前面還可以包含任意首碼;
3)整個注釋不區分大小寫。
-
如果使用UTF-8,在Windows下最好儲存的時候,選擇無BOM方式。
-
在Windows的命令列中,要正確顯示UTF-8輸出,應該執行命令“chcp 65001”,並將字型改為“Lucida Console”。
-
JRuby 1.6.x預設情況下是和Ruby1.8相容的,如果想要和1.9相容,需要設定系統變數“JRUBY_OPTS=--1.9”。
-
通常情況下(除非調用了exit!方法),Ruby會在退出之前執行所有的END語句,以及任何用at_exit函數註冊過的“關閉鉤子”代碼。