微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐