我有一个包含某些时间的yaml文件:
hours:
- 00:00:00
- 00:30:00
- 01:00:00
但是一旦我读到它们就会转换为时间(以秒为单位),但是我希望它们能够作为字符串保留片刻,以便我可以进行转换。这就是我读它们的方式:
def daily_hours
DefaultsConfig.hours.collect {|hour|
logger.info { hour.to_s }
}
end
它正在输出:
0 1800 3600
但我希望字符串保持不变,我可以将它们转换为以下时间:
12:00 am 12:30 am 1:00 am
为什么它们会自动转换,我该如何阻止它?
这是DefaultConfig类:
class DefaultsConfig
def self.load
config_file = File.join(Rails.root, "config", "defaults.yml")
if File.exists?(config_file)
config = ERB.new(File.read(config_file)).result
config = YAML.load(config)[Rails.env.to_sym]
config.keys.each do |key|
cattr_accessor key
send("#{key}=", config[key])
end
end
end
end
DefaultsConfig.load
答案 0 :(得分:8)
如果将值括在单引号中,YAML解析器会将该值视为字符串。
hours:
- '00:00:00'
- '00:30:00'
- '01:00:00'
现在,当您访问该值时,您将获得一个字符串而不是时间
DefaultsConfig.hours[0] # returns "00:00:00"
答案 1 :(得分:6)
没有引号或标记的标量是implicit type的主题。您可以使用引号或显式标记:
hours:
- '00:00:01'
- "00:00:02"
- !!str "00:00:03"