【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 2020-10-10
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多