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

时间:2016-08-30 14:17:27

标签: 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中打印。我在哪里弄错了?

2 个答案:

答案 0 :(得分:3)

我在您的代码中看到了一些错误。

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

  • 您的testCases方法是一种类方法,这意味着您可以在不创建类的新实例的情况下调用它,即A1.new。所以你调用像A1.testCases这样的方法(Ruby使用蛇案例作为方法名,test_cases,只是fyi)。您初始化test_hash方法中的initialize变量,该方法在您创建类的新实例之前不会自动调用。因此,当您只是运行' A1.testCases`时,test_hash不存在。

  • puts "#{k}"不是好习惯。 puts代表put字符串,它会自动将变量转换为字符串。您应该使用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

答案 1 :(得分:2)

困难的部分是要理解,在Ruby类中也是对象。因此a1 = A1.new是一个对象,A1也是一个对象。

@内使用initialize,您可以创建属于a1 = A1.new对象的实例变量。

通过在@方法中使用self.testCases,您可以创建属于A1对象的实例变量。