Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby无法访问方法之外的变量?_Ruby - Fatal编程技术网

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

Ruby无法访问方法之外的变量?,ruby,Ruby,我是Ruby新手,当我想做一些事情时,Ruby似乎确实支持在刚才访问的方法之外定义的变量: 上述代码将起作用。生成方法函数中的结果和模板变量与外部声明的变量不同,并且是该函数的局部变量。您可以使用$将它们声明为全局变量: $template=<<MTEMP #methodName#:function(){}, MTEMP $result=""; def generateMethods(mds) mds.each do |md| $result+=$template.gs

我是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'])

$template=您正在声明局部变量,而不是全局变量。有关更多(简化)的详细信息,请参阅此网站:

局部变量是其定义范围的局部变量。这就是为什么他们被称为局部变量,毕竟


因此,您不能从其他范围访问它们。这就是局部变量的全部意义。

事实上,我只想根据函数名在javascript中生成一些方法。@hguser在ruby中不建议使用全局变量,就像您知道在javascript中不建议使用全局变量以避免命名冲突一样,找到比声明变量更好的方法来处理变量globalIt在Javascript(和Python)中的工作方式有所不同,这可能是OP造成混淆的原因。如果你不表现得像Ruby那样做事是不言而喻的,那么你的回答会更有帮助。锑:是的,作为Ruby的新手,这也让我有点困惑。如果这是正确的语义,也可以将变量定义为常量。那么这个变量在OP的方法中是可以访问的。这个问题有一个合适的答案。
var xx='xx';
function afun(){
  console.info(xx);
}
$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'])