如果ruby中乙個區域性變數名和私有方法名同名的話,預設該名稱被解釋為變數而不是方法:
x=10;
def x;puts "what?" end
當你輸入x實際不能執行x方法。直譯器只把x解釋為變數。而且undef只能對方法而不能對變數下手,所以undef x仍然不行,變數還在那裡!一種解決方法是將x方法轉換為乙個method,然後呼叫:
x_f = method(:x)
x_f或者還有一種方法,就是方法別名!你可以指定x的乙個別名,這時x肯定會解釋為方法:
alias new_x x
new_x
你當然可以吧方法轉成method然後再轉成proc,最後呼叫,不過這似乎多此一舉鳥:
def call_x(&proc)
proc.call
endcall_x &x_f
哦鳥!ruby非常變通的,神馬事都有幾種解決方法。
ruby 區域性變數
區域性變數由小寫字母或下劃線 開頭.區域性變數不像全域性和實變數一樣在初始化前含nil值.ruby foo nil ruby foo nil ruby foo err eval 1 undefined local variable or method foo for main object 對區域性...
迴圈內部區域性變數與呼叫棧
正如其他部落格所提到的,區域性變數的生命週期是在乙個大括號內,即乙個所處塊結束。區域性變數和全域性變數的區別,區域性變數的生命週期是從建立開始到所處的塊結束就被 而全域性變數的生命週期是從建立開始到程式結束。正如上面所說,區域性變數是直到所處的塊結束才從呼叫棧中把它 先看下面的 for int i ...
成員變數與區域性變數
成員變數 作為類的成員而存在,直接存在於類中。所有類的成員變 量可以通過this來引用。區域性變數 作為方法或語句塊的成員而存在,存在於方法的引數列表和方法定義中。1.成員變數可以被 public,protect,private,static等修飾符修飾,而 區域性變數不能被控制修飾符及 stati...