ruby作为动态语言,不仅用于rail,还可以作为胶水语言广泛用于其他。
在我们常常采用config。ini来处理设置,在ruby中,采用yaml包来解决来解决在config。ini做设置。
先开始认识yaml是什么,(具体看:http://www.yaml.org/)
YAML是"Yet Another Markup Language(另一种标记语言)"的缩写,读音"yamel",或者"雅梅尔"。这种格式大约是2001年出现的,目前为止已经有多种语言的YAML解析器。
YAML是一种直观的能够被电脑识别的的数据数据序列化格式,它并且容易被人类阅读,容易与脚本语言交互的。
换种说法,YAML是一种非常简单的类似于XML的数据描述语言,语法比XML简单很多。他在描述可以被转化成数组或者hash的数据是非常有用。
在YAML里面,
1.结构通过缩进来表示,
2.连续的项目通过减号"-"来表示,
3.map结构里面的key/value对用冒号":"来分隔。
YAML也有用来描述好几行相同结构的数据的缩写语法,数组用'[]'包括起来,hash用'{}'来包括。因此,YAML表达一个简单的config.ini文件
[sys]
database=pubs
username=sa
pwd=sa
可以写到一个points.yml文件中
sys :
{database : pubs , username : sa pwd : sa}
注意:冒号2边要留空格,否则yaml 中的hash解析不出
在ruby中,写一个读取例子,
require 'yaml'
points = YAML.load(IO.read('points.yml'))
points.each{|point|
p point
ss = point[1]
print "database :", ss["database"], "\n"
print "user:" , ss["user"], "\n"
print "pwd:" , ss["pwd"], "\n"
}
则
---------- ruby ----------
["sys", {"user"=>"sa", "pwd"=>"sa", "database"=>"pubs"}]
database :pubs
user:sa
pwd:sa
这篇文章介绍yaml比我深,一并备注;
http://blog.csdn.net/smilewater/archive/2007/07/05/1679835.aspx
********************
yaml的语法标记;
YAML语言元素
1 列表(List)
表示一个列表很简单,在每个条目前加入一个短横线。比如
- Item1
- Item2
- Item3
在Ruby中会被解释为数组对象(Array),上例为:
["Item1", "Item2", "Item3"]
2.哈希表(Hash)
哈希表的键/值之间用冒号(:)进行分隔。
key1 : value1
key2 : value2
key3 : value3
在Ruby中会被解释为如下的哈希对象:
{"key1"=>"value1", "key2"=>"value2", "key3"=>"value3"}
3. 字符串和其它基本类型
YAML会自动判断类型,一般性的文字都会被解释为字符串。在有可能发生歧义的情况下,可以为字符串加上单引号或者双引号(在双引号下转义字符会被转义,转义方式与C语言类似)来避免歧义。
下面是一个例子,包含了字符串、整数、浮点数和日期类型:
1 : 1.0
1.0 : "1.0"
"1.0" : 2006-01-01
它会被解释为:
{1=>1.0, "1.0"=>#<Date: 4907473/2,0,2299161>, 1.0=>"1.0"}
可以看出它的类型被很好的识别出来。
4. 字符串块
字符串可能会占据多行,可以用两种方式来处理这种情况,一种是保留换行符,另外一种则去除换行符。
用| 表示保留换行符:
|
This is line1.
This is line2.
This is line3.
解释为:
"This is line1.\nThis is line2.\nThis is line3."
用>表示删除换行符:
>
Hello,
world.
解释为:
"Hello, world."
以上是一些常用的基本类型,当然它们还可以组合为更复杂的结构,比如列表的内容可以是列表本身,也可以是哈希表;哈希表的内容也可以是列表或哈希表,它们可以嵌套使用,来获得非常复杂的结构。