我对 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
中打印。我在哪里犯了错误?
最佳答案
我在您的代码中发现了一些错误。
在您的初始化方法中,您创建了一个全局变量
$test_hash
,任何时候您在变量前面放置一个$
,它就变得可用。在这种情况下,这不是您想要做的事情。在这种情况下,实例变量最适合您。您的
testCases
方法是一个类方法,这意味着您可以调用它而无需创建该类的新实例,即A1.new
。所以你调用像A1.testCases
这样的方法(Ruby 使用 snake case 作为方法名称,test_cases
,仅供引用)。您在initialize
方法中初始化了test_hash
变量,该方法在您创建该类的新实例之前不会自动调用。因此,当您简单地运行“A1.testCases”时,test_hash
不存在。puts "#{k}"
这行不是好的做法。puts
代表put string,它会自动将变量转换成字符串。你应该使用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
关于ruby - 在 ruby 脚本中访问 self.method 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230016/