繁体   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