如何定义方法中存在的变量外部方法?

时间:2018-05-21 19:07:29

标签: mysql ruby-on-rails ruby methods

我尝试创建一种方法,允许我在ruby中查询SQL而不为每个查询键入results = client.query('code')。这是我当前的方法,但它说我的puts语句中的结果是未定义的。当我不使用我的方法时,它会正常工作。

require "mysql2" 
client = Mysql2::Client.new(:username => 'buck19j')


def sql(code)
   client = Mysql2::Client.new(:username => 'buck19j')
   results = client.query(code)
end

sql('SHOW DATABASES')
puts(results.to_a)

如何定义方法中存在的变量外部方法?

2 个答案:

答案 0 :(得分:2)

使方法返回值,而不是分配

def sql(code)
   client = Mysql2::Client.new(:username => 'buck19j')
   client.query(code)
end

然后在调用方法时分配变量:

results = sql('SHOW DATABASES')
puts(results.to_a)

答案 1 :(得分:2)

results没有"出去" sql方法,因为是局部变量。一种方法是将其定义为实例变量,然后您可以像使用puts一样使用(仍然不清楚这是什么')

def sql(code) 
  client = Mysql2::Client.new(:username => 'buck19j')
  @results = client.query(code)
end

sql('SHOW DATABASES')
puts(@results.to_a)

其他方式就是让函数返回client.query(code)值:

def sql(code) 
  client = Mysql2::Client.new(:username => 'buck19j')
  client.query(code)
end

puts(sql('SHOW DATABASES').to_a)