undefined local variable or method for main:Object (NameError)
。
这是正确的吗? on ruby 1.8.7(2010-01-10 patchlevel 249)[i486-linux]
以下是可行的代码。如果我从变量名称($ db,$ db_root,$ db_root_password)中删除$
,我会收到错误消息。
$db = get_single_argument("database name")
$db_root = get_single_argument("database root user name")
$db_root_passwd = get_single_argument("database root user password")
mysql_commands = get_conf_file("installer_mysql.erb")
puts mysql_commands.result #gives me the error
和 get_conf_file 程序
def get_conf_file(file)
return_array = Array.new
if (File.exists?(file))
return_array = ERB.new File.read(file)
end
return_array
end
答案 0 :(得分:9)
Ruby有一个名为binding的概念,您可能将其视为一段代码可能具有的局部变量,self,block等值。您可能还会将绑定视为代码的上下文。
Erb的result
方法采用可选的第二种方法,该方法用于评估您提供的代码,因此您可以执行类似
x = 1
ERB.new('x=<%= x %>').result(binding) #=> "x=1"
答案 1 :(得分:1)
你没有传递调用者的绑定,你应该是:
puts mysql_commands.result(binding)
绑定包含当前作用域中的所有变量引用。