首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby不能访问方法外部的变量吗?

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

Stack Overflow用户
提问于 2012-02-22 13:14:35
回答 3查看 22.9K关注 0票数 19

我是Ruby的新手,当我想做一些事情时,Ruby似乎确实支持在方法外部定义的变量:

代码语言:javascript
复制
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 (NameError)的

未定义的局部变量或方法'template‘

似乎我不能访问generateMethods方法内部的templateresult变量?

为什么?

更新:

似乎作用域的概念与javascript中的有所不同?

代码语言:javascript
复制
var xx='xx';
function afun(){
  console.info(xx);
}

上面的代码将会工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-22 13:27:17

generateMethods函数内部的resulttemplate变量与外部声明的变量不同,并且是该函数的局部变量。您可以使用$将它们声明为全局变量

代码语言:javascript
复制
$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'])

但是使用这个函数的目的是什么呢?我认为如果你能更多地解释你的问题,就会有一种更清晰的方法来做这件事。

票数 16
EN

Stack Overflow用户

发布于 2012-02-22 13:28:45

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

票数 2
EN

Stack Overflow用户

发布于 2012-02-22 17:33:24

局部变量是定义它们的作用域的局部变量。这就是为什么它们被称为局部变量的原因!

因此,您不能从不同的作用域访问它们。这就是局部变量的意义所在。

票数 -9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9389432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档