ruby - 在 ruby​​ 脚本中访问 self.method 中的变量

标签 ruby

我对 ruby 很陌生。我在获取 self.method

中的变量值时遇到问题

我的 ruby​​ 类/脚本如下所示:

class A1
  def initialize
    @myUtil = MyUtil.new log
    @test_hash = @myUtil.loadPropertiesFile(File.dirname(__FILE__) + '/my-tests.properties')
  end

  def self.testCases
    tests = {}

    @test_hash.each do |k, v|
        puts "#{k}"
    end

    tests
  end

  def launch test, testbed, h = {}

    @test_hash.each do |k, v|
        puts "#{k}"
    end

  end
end

我可以在 @test_hash 的启动方法中打印值,但不能在 self.testCases 中打印。我在哪里犯了错误?

最佳答案

我在您的代码中发现了一些错误。

  • 在您的初始化方法中,您创建了一个全局变量$test_hash,任何时候您在变量前面放置一个$,它就变得可用。在这种情况下,这不是您想要做的事情。在这种情况下,实例变量最适合您。

  • 您的testCases 方法是一个类方法,这意味着您可以调用它而无需创建该类的新实例,即A1.new。所以你调用像 A1.testCases 这样的方法(Ruby 使用 snake case 作为方法名称,test_cases,仅供引用)。您在 initialize 方法中初始化了 test_hash 变量,该方法在您创建该类的新实例之前不会自动调用。因此,当您简单地运行“A1.testCases”时,test_hash 不存在。

  • puts "#{k}" 这行不是好的做法。 puts代表put string,它会自动将变量转换成字符串。你应该使用 puts k#{} 用于字符串插值。如“嗨,我叫#{name},今年#{age}岁。”

下面是我将如何做到这一点。为了测试目的,我用一个简单的散列替换了 test_hash

class A1
  def initialize
    @test_hash = {a: 1, b: 2, c: 3, d: 4, e: 5}
  end

  def testCases
    @test_hash.each do |k, v|
        puts k
    end
  end
end

现在,您创建一个新的 A1 实例并调用 testCases 方法(现在是实例方法,而不是类方法)

A1.new.testCases

关于ruby - 在 ruby​​ 脚本中访问 self.method 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230016/

相关文章:

ruby-on-rails - 如何使用/find_or_create_by 跳过验证?

ruby - 使用方法参数引用 YAML 节点

ruby-on-rails - 安装rails错误:Failed to build gem native extension

Ruby - 需要 'watir-webdriver' - 生成一个没有这样的文件的 LoadError ... 为什么?

ruby - Rack 在其中间件中为每个提供什么

ruby-on-rails - Jekyll 错误 Errno::ECONNRESET: 连接由 peer @ io_fillbuf 重置 - fd:17

javascript - 如何通过javascript ajax解决 'youtube link cors problem'?

ruby-on-rails - 在 Ruby 中卡住一个随机数

ruby - 什么时候使用 Regexp.new()?

ruby-on-rails - 使用 RMagick 将 JPG 转为 PNG