我对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