我是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
方法内的result
和generateMethods
变量?
为什么?
更新
似乎范围概念与javascript中的不同?
var xx='xx';
function afun(){
console.info(xx);
}
以上代码可以使用。
答案 0 :(得分:14)
result
函数中的template
和generateMethods
变量与外部声明的变量不同,并且是该函数的本地变量。您可以使用$
声明它们为全局变量:
$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 变量,毕竟!
因此,您无法从其他范围访问它们。这是局部变量的整点。