在表達式中,當(dāng)Ruby看到像a這樣的名字時,它需要判斷a是一個局部變量引用還是對沒有參數(shù)的方法a的調(diào)用。Ruby使用一種啟發(fā)式的方法來判斷這種情況。當(dāng)Ruby解析源代碼文件時,它會記錄所有已經(jīng)被賦值的符號。它認為這些符號是變量。以后當(dāng)遇到一個既可以是變量又可以是方法調(diào)用的符號時,Ruby會檢查是否已經(jīng)對該符號進行了賦值。如果是,那么把該符號當(dāng)作變量,否則當(dāng)作方法調(diào)用。下面是描述這種情況的一個人為設(shè)計的例子。
def a
print "Funciton 'a' called\n"
99
end
for i in 1..2
if i ==2
print "a=",a,"\n"
else
a=1
print "a=",a,"\n"
end
end
輸出結(jié)果:
a=1
Function 'a' called
a=99
當(dāng)解析的時候,Ruby看到第一個print語句使用了a,并且由于還沒有遇到對a的任意賦值語句,所以把它當(dāng)作方法調(diào)用。但是當(dāng)解析到第二個print語句時,由于Ruby遇到了對a的一個賦值語句,所以把它當(dāng)作變量
注意賦值語句不一定被執(zhí)行--只要Ruby看到它了就可以。下面的程序不會導(dǎo)致錯誤
您可能感興趣的文章:- Ruby基本的環(huán)境變量設(shè)置以及常用解釋器命令介紹
- Ruby中類變量和實例變量的比較
- 詳細解析Ruby中的變量
- Ruby 中$開頭的全局變量、內(nèi)部變量、隱藏變量介紹
- ruby 局部變量
- ruby 實變量
- 深入分析Ruby 變量