【问题标题】:How to define variable outside method that is present inside method?如何定义方法内部存在的变量外部方法?
【发布时间】:2018-05-21 19:07:29
【问题描述】:
我正在尝试创建一种方法,该方法允许我在 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)
如何定义存在于方法内部的方法外部变量?
【问题讨论】:
标签:
mysql
ruby-on-rails
ruby
methods
【解决方案1】:
使方法返回值,而不是赋值它:
def sql(code)
client = Mysql2::Client.new(:username => 'buck19j')
client.query(code)
end
然后在调用方法的时候赋值一个变量:
results = sql('SHOW DATABASES')
puts(results.to_a)
【解决方案2】:
results 不会“走出” sql 方法,因为它是一个局部变量。一种方法是将其定义为实例变量,然后您可以像使用 puts 一样使用 then(仍然不清楚它的整个上下文是什么)。
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)