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'])
Когда я попытался запустить его, я получил ошибку:
undefined локальная переменная или метод 'template' для main: Object (NameError)
Кажется, что я не могу получить доступ к переменной template
и result
внутри метода generateMethods
?
Почему?
Update:
Кажется, что концепция области отличается от того, что находится в javascript?
var xx='xx';
function afun(){
console.info(xx);
}
Вышеприведенный код будет работать.
Ответы
Ответ 1
Переменные result
и template
внутри функции 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'])
Но какова ваша цель с этой функцией? Я думаю, что есть более чистый способ сделать это, если вы сможете больше объяснить свой вопрос.
Ответ 2
Вы объявляете локальные переменные, а не глобальные. См. Этот сайт для получения дополнительной (упрощенной) информации:
http://www.techotopia.com/index.php/Ruby_Variable_Scope
Ответ 3
Локальные переменные являются локальными для области, в которой они определены. Вот почему они все же называются локальными переменными!
Эрго, вы не можете получить к ним доступ из другой области. То, что вся точка локальных переменных.