Как определить переменную вне метода, которая присутствует внутри метода?

0

Я пытаюсь создать метод, который позволяет мне запрашивать 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)

Как определить переменный внешний метод, который присутствует внутри метода?

Теги:
methods

2 ответа

2
Лучший ответ

Чтобы метод возвращал значение, не назначайте его:

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 (все еще неясно, какой именно контекст этого).

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню