我对红宝石很新。我在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
中打印。我在哪里弄错了?
答案 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
对象的实例变量。