to_yaml方法产生不错的YAML输出,但是我想在某些元素之前添加注释行。有办法吗?
例如,我想生产:
# hostname or IP address of client
client: host4.example.com
# hostname or IP address of server
server: 192.168.222.222
Run Code Online (Sandbox Code Playgroud)
从类似于:
{
:client => 'host4.example.com',
:server => '192.168.222.222',
}.to_yaml
Run Code Online (Sandbox Code Playgroud)
...但是不确定YAML模块是否有办法实现。
更新:我最终没有使用使用正则表达式插入注释的解决方案,因为它需要将数据与注释分开。对我来说,最简单,最容易理解的解决方案是:
require 'yaml'
source = <<SOURCE
# hostname or IP address of client
client: host4.example.com
# hostname or IP address of server
server: 192.168.222.222
SOURCE
conf = YAML::load(source)
puts source
Run Code Online (Sandbox Code Playgroud)
对我来说,好处是无需重复任何操作(例如,“ client:”仅指定一次),数据和注释在一起,可以将源输出为YAML,并且可以使用数据结构(在conf中可用)。使用。
您可以对所有插入进行字符串替换:
require 'yaml'
source = {
:client => 'host4.example.com',
:server => '192.168.222.222',
}.to_yaml
substitution_list = {
/:client:/ => "# hostname or IP address of client\n:client:",
/:server:/ => "# hostname or IP address of server\n:server:"
}
substitution_list.each do |pattern, replacement|
source.gsub!(pattern, replacement)
end
puts source
Run Code Online (Sandbox Code Playgroud)
输出:
---
# hostname or IP address of client
:client: host4.example.com
# hostname or IP address of server
:server: 192.168.222.222
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |