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

我对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中打印.我在哪里弄错了?

解决方法

我在你的代码中看到了一些错误.

>在你的initialize方法中,你创建了一个全局变量$test_hash,只要你把一个$放在变量前面,它就变得可用了.在这种情况下,这不是你想要做的事情.在这种情况下,实例变量最适合您.
>您的testCases方法一个方法,这意味着您可以在不创建类的新实例(即A1.new)的情况下调用它.所以你调用方法就像A1.testCases(Ruby使用snake case作为方法名,test_cases,只是fyi).您在initialize方法中初始化test_hash变量,该方法在您创建类的新实例之前不会自动调用.因此,当您只运行’A1.testCases`时,test_hash不存在.
>对于行放“#{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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...