5分钟认识YAML

时间:2007-08-25 14:32:36  来源:  作者:

译: liubin http://www.ruby-cn.org/
原文: http://yaml.kwiki.org/index.cgi?HomePage

文档位置:http://www.ruby-cn.org/articles/yaml_in_5_minutes.html

2004/11/11

译者注:在开始之前,也许,你想先看看yaml的基本概念,如果是,请点这里:http://www.ruby-cn.org/articles/what_is_yaml.html

第一分钟:一个简单的列表

你的朋友给你寄了一封如下的信件:

- Memoirs Found in a Bathtub
- Snow Crash
- Ghost World

同时,他也要求你按照上面的顺序来阅读这些书,他想和你探讨关于这些书的内容。

在YAML中,这些有顺序的列表(list)叫做序列(sequence)。序列包括了一组有顺序的数据,当你在程序中载入这个序列,它们的顺序保持不变。

在很多比较灵活的语言中,你可以用指定索引的方式访问这个序列及其中的值。以0开头的表示这个序列的第一项。

在PHP, Perl, 或 Ruby中,可以这样:

print $book_list[0];

打印结果如下:

Memoirs Found in a Bathtub

这也是上面书籍列表的第一项。
其他列表

列表(Lists)可以包括各种数据:

---
- 1           # Numbers
- Snow Crash  # Strings
- 2003-07-24  # Dates

上面的列表以三个"-"开头,这三个"-"是文档分割符(document separator),它表示了一段YAML文档的开始。当然,你也可以划分多个文档,比如:

---
- Harry Potter and the Prisoner of Azkaban
- Harry Potter and the Goblet of Fire
- Harry Potter and the Order of the Phoenix
---
- Memoirs Found in a Bathtub
- Snow Crash
- Ghost World

第二分钟:一个简单的字典

当你沉浸在阅读 Harry Potter 时,你的朋友又寄来了新的列表,这次列表包括了作者的名字:

Stanislaw Lem: Memoirs Found in a Bathtub
Neal Stephenson: Snowcrash
Daniel Clowes: Ghost World

上面的字典没有顺序,但是每个作者都对应一本书的名字。你的朋友希望你可以根据作者找到你想要的书。(注意前面没有"-")

在YAML中,这样的字典结构称为 map,map通常用来存放成对的数据,冒号左面的称为key,右面的叫做value。

key 用作从map中取数据的索引。

在PHP 或 Ruby中,可以这样写:

print $books_by_author['Daniel Clowes'];

将打印如下内容:

Ghost World

Sequence中的Map

你的朋友寄给你了一份更新的列表,包括了作者,书名,并且有一定的顺序,希望你能按照这个顺序来阅读。

---
- Stanislaw Lem: Memoirs Found in a Bathtub
- Neal Stephenson: Snowcrash
- Daniel Clowes: Ghost World

上面的序列中,每一项都是一个map,当一种集合(collection )包括另一种集合时,称作嵌套(nesting)。
第三分钟:邮箱里的东西

第三分钟我们先放慢一下速度,老师让你朋友这么打扰你我想过不多久你肯定会被气疯的。

冉我们来看看你的信箱。你住在一个公寓里,你的信箱只有一个小口可以投信,旁边是其他的几百个信箱。

你检查一下自己的信箱发现了五封信。两封是给你的邻居Jim O'Connor的,一封是给一个叫做"Hank Bros.: the Car Wash!"的公司的,其他的两封信是你自己的。

你打算对自己邮箱里多出来的信进行投诉,你打算给邮局发送一封信,让他们看看这给你带来了多大的麻烦。

你开始了一个新的YAML文档,里面包括今天的日期,和你的信箱里的信件:

---
date: 2003-07-25
letters to:
  "Hank Bros.: the Car Wash!": 1
  Jim O'Connor: 2
  Myself: 2

这个例子里,一个map嵌套了另一个map,第一个MAP的key是,它的值是letters to 一个被嵌套的MAP,第二个MAP是缩进排列的。

内容导航

文章评论

共有 位CH网友发表了评论 查看完整内容