gpt4 book ai didi

ruby - 变量魔术和从文件中读取

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:30 25 4
gpt4 key购买 nike

假设,我得到以下文件(input.txt):

name = "Peter"
age = 26
family_status = married

提到的行可以按随机顺序存储,谎言:

family_status = married
name = "Peter"
age = 26

在我的程序中,我还有变量family_statusagename。我如何在一个循环中从文件中读取这些行并为相应的变量分配值?

最佳答案

设置变量

这取决于几个事实。

  • 你有什么样的变量(局部变量、实例变量、类变量或全局变量)
  • family_status 是什么类型(String, Symbol, whatever)

我假设您为此使用了实例变量:

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_setvar= :"@... 行。此代码具有以下优点:

  • 您可以控制可以设置哪些变量
  • 您可以控制这些变量的类型
  • 您可以在不更改读取代码的情况下轻松添加新变量和/或更改变量类型
  • 您可以使用此代码读取完全不同的文件,而无需为其编写新代码

以 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 .有关 yaml 和 ruby​​ 的更多信息,请访问 http://www.ruby-doc.org/stdlib/libdoc/yaml/rdoc/index.html .

关于ruby - 变量魔术和从文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com