您说过您希望“将值 'TheFirststep'、'Secondstep 和 'Finalstep' 分配给单独的变量。
您不能动态创建局部变量(无论如何,自 Ruby v1.8 起就没有)。这留下了两个选择:将这些值分配给实例变量或使用不同的数据结构,特别是哈希。
首先让我们创建一个数据文件。
data <=-END
ABC = Thefirststep
XYZ = Secondstep
ABC_XYZ = Finalstep=345ijk!r4+
END
FName = 'test'
File.write(FName, data)
#=> 73
为实例变量赋值
File.foreach(FName) do |line|
var, value, * = line.chomp.split(/\s*=\s*/)
instance_variable_set("@#{var.downcase}", value)
end
@abc
#=> "Thefirststep"
@xyz
#=> "Secondstep"
@abc_xyz
#=> "Finalstep"
实例变量名称的约定(在"@" 之后)是使用snake-case,这就是我将它们小写的原因。
将值存储在哈希中
File.foreach(FName).with_object({}) do |line,h|
var, value, * = line.chomp.split(/\s*=\s*/)
h[var] = value
end
#=> {"ABC"=>"Thefirststep", "XYZ"=>"Secondstep", "ABC_XYZ"=>"Finalstep"}
虽然这样做很简单,但动态生成实例变量或使用动态创建的键生成散列通常没有帮助。那是因为它们只有在它们的值可以被获取并且可能改变时才有用,这是有问题的。
注意在
var, value, * = line.chomp.split(/\s*=\s*/)
var 等于拆分操作返回的数组的第一个元素,value 是第二个值,* 丢弃剩余元素(如果有)。