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

hgu*_*ser 18 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'])
Run Code Online (Sandbox Code Playgroud)

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

主要的未定义局部变量或方法'模板':Object(NameError)

看来我无法访问templateresult变量内部的generateMethods方法?

为什么?


更新:

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

var xx='xx';
function afun(){
  console.info(xx);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将起作用.

Dav*_*Xia 14

resulttemplate内部变量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'])
Run Code Online (Sandbox Code Playgroud)

但是这个功能的目的是什么?如果您能更多地解释您的问题,我认为有更简洁的方法可以做到这一点.