Я пытаюсь создать метод, который позволяет мне запрашивать SQL в ruby без ввода results = client.query('code')
для каждого запроса. Heres мой текущий метод, но он говорит, что результаты не определены в моей инструкции 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)
Как определить переменный внешний метод, который присутствует внутри метода?
Чтобы метод возвращал значение, не назначайте его:
def sql(code)
client = Mysql2::Client.new(:username => 'buck19j')
client.query(code)
end
Затем назначьте переменную при вызове метода:
results = sql('SHOW DATABASES')
puts(results.to_a)
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)