转换成 YAML
YAML 定义了一种序列化(数据保存)格式,它将信息存储为人类可读的文本。YAML 可以与各种编程语言一起使用,为了在 Ruby 中使用它,你的代码需要使用 yaml.rb 文件。通常,这可以通过在代码单元的顶部加载或“引入”(requiring)文件来完成,如下所示:
require 'yaml'
完成此操作后,你将可以访问各种方法将 Ruby 对象转换为 YAML 格式,以便将其数据写入文件。随后,你将能够回读已保存的数据并使用它来重新构造 Ruby 对象。
要将对象转换为 YAML 格式,可以使用 to_yaml
方法。它可以转换任何对象 - 字符串,整数,数组,哈希等。例如,这是转换字符串的方式:
"hello world".to_yaml
这是如何转换数组:
["a1", "a2" ].to_yaml
这是你通过此数组转换获得的 YAML 格式:
---
- a1
- a2
请注意定义新 YAML ‘文档’的开头的三个破折号以及定义列表中每个新元素的单个破折号。有关 YAML 格式的更多信息,请参阅本章末尾的“深入探索”部分。
你还可以将非标准类型的对象转换为 YAML。例如,假设你创建了此类和对象…
class MyClass
def initialize( anInt, aString )
@myint = anInt
@mystring =aString
end
end
ob1 = MyClass.new( 100, "hello world" ).to_yaml
此对象的 YAML 表示形式将以文本 !ruby/object:
开头,后跟类名,每行一个变量名称附加冒号(但减去 @
)及其值:
--- !ruby/object:MyClass
myint: 100
mystring: hello world
如果要打印出对象的 YAML 表示,可以使用方法 y()
,它是一种 YAML 的方法,等同于我们熟知的用来查看并打印正常的 Ruby 对象的 p()
方法:
y( ['Bert', 'Fred', 'Mary'] )
这将显示:
---
- Bert
- Fred
- Mary
你可以同样的显示一个哈希对象…
y( { 'fruit' => 'banana', :vegetable => 'cabbage', 'number' => 3 } )
…在这种情况下,每个键/值对都放在一个新行上:
---
number: 3
fruit: banana
:vegetable: cabbage
或者你可以显示自己的“自定义”对象…
t = Treasure.new( 'magic lamp', 500 )
y( t )
…它显示的数据,如前面我使用 to_yaml
的示例一样,顶部是类名以及连续行上是一对变量名和值:
--- !ruby/object:Treasure
name: magic lamp
value: 500
你甚至可以使用 y()
来显示非常复杂的对象,例如嵌套数组:
arr1 = [ ["The Groovesters", "Groovy Tunes", 12 ],
[ "Dolly Parton", "Greatest Hits", 38 ]
]
y( arr1 )
…或包含任意类型对象的数组:
arr2 = [ CD.new("The Beasts", "Beastly Tunes", 22),
CD.new("The Strolling Bones", "Songs For Senior Citizens", 38)
]
y( arr2 )