簡體   English   中英

Ruby無法訪問方法外的變量?

[英]Ruby can not access variable outside the method?

我是Ruby的新手,看來Ruby確實支持在我想要做的事情時剛剛訪問的方法之外定義的變量:


template=<<MTEMP
#methodName#:function(){},
MTEMP
result="";
def generateMethods(mds)
  mds.each do |md|
    result+=template.gsub(/#methodName#/,md).to_s+"\n";
  end
  result;
end

puts generateMethods(['getName','getAge','setName','setAge'])

當我試圖運行它時,我收到錯誤:

主要的未定義局部變量或方法'模板':Object(NameError)

看來我無法訪問generateMethods方法內部的templateresult變量?

為什么?


更新:

看來范圍概念與javascript中的不同?

var xx='xx';
function afun(){
  console.info(xx);
}

上面的代碼將起作用。

generateMethods函數中的resulttemplate變量與外部聲明的resulttemplate變量不同,並且是該函數的本地變量。 您可以使用$將它們聲明為全局變量:

$template=<<MTEMP
#methodName#:function(){},
MTEMP
$result="";
def generateMethods(mds)
  mds.each do |md|
    $result+=$template.gsub(/#methodName#/,md).to_s+"\n";
  end
  $result;
end
puts generateMethods(['getName','getAge','setName','setAge'])

但是這個功能的目的是什么? 如果您能更多地解釋您的問題,我認為有更簡潔的方法可以做到這一點。

您正在聲明局部變量,而不是全局變量。 有關更多(簡化)詳細信息,請訪問此站點: http//www.techotopia.com/index.php/Ruby_Variable_Scope

局部變量是它們定義的范圍的本地變量。這就是為什么它們被稱為局部變量,畢竟!

因此,您無法從不同的范圍訪問它們。 這是局部變量的整點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM