Ruby不能访问方法外的变量?

zed5wv10  于 2023-03-01  发布在  Ruby
关注(0)|答案(4)|浏览(140)

我是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方法内部的templateresult变量?
为什么?
更新:
看起来作用域的概念与javascript中的不同?

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

上面的代码可以工作。

aiqt4smr

aiqt4smr1#

generateMethods函数内部的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'])

但是你使用这个函数的目的是什么呢?我想如果你能更详细地解释你的问题,会有一个更简洁的方法。

hwazgwia

hwazgwia2#

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

nqwrtyyt

nqwrtyyt3#

您需要使用全局变量(带$)或常量(全部大写字母或首字母和部分字母)
您可以在此搜索更多内容

64jmpszr

64jmpszr4#

局部变量是定义它们的作用域的局部变量。这就是为什么它们被称为 local variables!
因此,你不能从另一个作用域访问它们,这就是局部变量的意义所在。

相关问题