我是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:Object的局部变量或方法"template"(NameError)
似乎无法访问generateMethods
方法内部的template
和result
变量?
为什么?
更新:
看起来作用域的概念与javascript中的不同?
var xx='xx';
function afun(){
console.info(xx);
}
上面的代码可以工作。
4条答案
按热度按时间aiqt4smr1#
generateMethods
函数内部的result
和template
变量与外部声明的变量不同,它们是该函数的局部变量。您可以使用$
将它们声明为全局变量:但是你使用这个函数的目的是什么呢?我想如果你能更详细地解释你的问题,会有一个更简洁的方法。
hwazgwia2#
您正在声明局部变量,而不是全局变量。有关更多(简化)详细信息,请访问此站点:http://www.techotopia.com/index.php/Ruby_Variable_Scope
nqwrtyyt3#
您需要使用全局变量(带$)或常量(全部大写字母或首字母和部分字母)
您可以在此搜索更多内容
64jmpszr4#
局部变量是定义它们的作用域的局部变量。这就是为什么它们被称为 local variables!
因此,你不能从另一个作用域访问它们,这就是局部变量的意义所在。