在ruby脚本self.method中访问变量
我对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
。我犯了什么错误?
我在代码中看到一些错误。
在你的初始化方法,创建一个全局变量
$test_hash
,任何时候你把$
在变量的前面,它可用的一切。这不是你想要在这种情况下做的事情。在这种情况下,实例变量对你最有效。您的
testCases
方法是一种类方法,这意味着您可以在不创建类的新实例的情况下调用它,即A1.new
。所以你称之为方法A1.testCases
(Ruby使用方法名称的蛇壳,test_cases
,只是fyi)。您在initialize
方法中初始化test_hash
变量,该方法在创建类的新实例之前不会自动获取调用。因此,当您运行'A1.testCases`时,test_hash
不存在。对于行
puts "#{k}"
是不好的做法。puts
代表放入字符串,它会自动将该变量转换为字符串。你应该使用puts k
。#{}
用于字符串插值。比如“嗨,我的名字是#{姓名},而且我年龄超过了年龄。”
以下是我将如何做到这一点。出于测试目的,我用一个简单的散列替换了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
另外令人困惑的是在方法中创建了'tests'并且从未使用过,只是返回一个空的哈希值,没有明显的原因。 ''#{k}“'是一个不好的习惯。只需'放入k',转换就会自动完成。 – tadman
这是一个好点,我会更新我的答案 – davidhu2000
嘿,@ davidhu2000,你的修改工程。其实我的问题是我如何使用“self.omeMethod”中初始化方法中的“@test_hash”变量? –
难的是要明白,在Ruby中类也是对象。所以a1 = A1.new
是一个对象,A1
也是一个对象。
通过在initialize
中使用@
,可以创建属于a1 = A1.new
对象的实例变量。
通过使用@
内部的self.testCases
方法,您可以创建属于A1
对象的实例变量。
你的代码看起来过于复杂。它应该做什么?或者你只是想弄清楚Ruby中的类是如何工作的? – Stefan
看起来像某人在Perl中完成了太多时间。注意像'$ test_hash'这样的全局变量,并且如果你确实声明了它们,则一致地引用它们。这里没有'$'和'@'切换。 – tadman