Ruby无法访问方法外的变量?

时间:2012-02-22 05:14:35

标签: ruby

我是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'])

当我尝试运行它时,我收到错误:

  

未定义的局部变量或main的方法'template':Object(NameError)

我似乎无法访问template方法内的resultgenerateMethods变量?

为什么?


更新

似乎范围概念与javascript中的不同?

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

以上代码可以使用。

3 个答案:

答案 0 :(得分:14)

result函数中的templategenerateMethods变量与外部声明的变量不同,并且是该函数的本地变量。您可以使用$声明它们为全局变量:

$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'])

但是这个功能的目的是什么?如果你能更多地解释你的问题,我认为有更清洁的方法。

答案 1 :(得分:2)

您要声明局部变量,而不是全局变量。有关更多(简化)详细信息,请访问此站点: http://www.techotopia.com/index.php/Ruby_Variable_Scope

答案 2 :(得分:-5)

局部变量是它们定义的范围的局部变量。这就是为什么它们被称为 local 变量,毕竟!

因此,您无法从其他范围访问它们。这是局部变量的整点