设置变量
这取决于几个事实。
- 你有什么类型的变量(局部变量、实例变量、类变量或全局变量)
- family_status 是什么类型(
String,
Symbol
, 任何)
我假设您为此使用实例变量:
def read_vars(io, vars)
io.each do |line|
# ensure the line has the right format (name = var)
raise "wrong format" unless line=~ /^\s*(\w+)\s*=\s*"?(.*?)"?\s+$/
var= :"@#{$1}"
# pick the type of the data
value= case vars[var]
when String
$2
when Integer
$2.to_i
when Symbol
$2.to_sym
else
raise "invalid var"
end
instance_variable_set(var, value)
end
end
read_vars(File.read("input.txt", :@age => Integer, :@name => String, :@family_status => Symbol )
如果您不使用实例变量,则必须更改instacne_variable_set
and var= :"@...
符合您的需求。这段代码有以下优点:
- 您可以控制可以设置哪些变量
- 您可以控制这些变量的类型
- 您可以轻松添加新变量和/或更改变量类型,而无需更改读取代码
- 您可以使用此代码读取完全不同的文件,而无需为其编写新代码
读取为 YAML
如果您的需求不像您的问题那么具体,我会采取完全不同的方法。
我会写input.txt
作为 yaml 文件。在 yaml 语法中,它看起来像这样:
---
name: Peter
age: 26
family_status: :married
您可以通过以下方式阅读:
YAML.load(File.read("input.txt")) # => {"name" => "Peter", "age" => 26, "family_status" => :married }
如果你不控制的话要小心input.txt
文件中,您无法控制数据的类型。我会命名该文件input.yaml
代替input.txt
。如果您想了解更多有关如何编写 yaml 文件的信息,请查看:http://yaml.kwiki.org/?YamlInFiveMinutes http://yaml.kwiki.org/?YamlInFiveMinutes。有关 yaml 和 ruby 的更多信息可以在以下位置找到:http://www.ruby-doc.org/stdlib/libdoc/yaml/rdoc/index.html http://www.ruby-doc.org/stdlib/libdoc/yaml/rdoc/index.html.