布依族

这张照片是在贵州省博物馆里看到的,在镇宁的时候,大街上能看到很多带着头巾的少数民族,后来了解到这个民族是“布依族”,在大街上看到的穿着传统民族服饰的基本都是中老年妇女,不会像照片上女子这么年轻靓丽。并且在大街上看到的妇女们的头巾也与照片略有不同,两边没有散开,是一层一层缠起来的。

镇宁是安顺市下面的一个县,并且是“布依族苗族”自治县,后来了解到这个县的布依族人口很多。我原本对这个民族完全没有认识和了解,在博物馆看到她居然有270万人口,在贵州的少数民族里仅次于苗族。

黄果树马拉松2013

从上海坐飞机到达贵阳时3点左右,然后坐大巴到火车站,再乘坐火车到安顺。在安顺坐汽车到镇宁,去报到处领取了号码簿和芯片,这次是个小型赛事,居然把参赛者都印到了一本名册上。并在现场有两个医护人员测量了一下血压和心脏,我的高压有139,有点高,可能是最近休息的不好所致,平时并没有这么高,担心会不让参赛,解释说这两天睡眠较少受了影响,平时一直有跑步。她有仔细检查了一下心率,还好通过了。

周四上午比赛,真正参加半程比赛的人数不过几百人,女子半程就更少的可怜了。组织者为了充数,让当地的中小学生们也来凑热闹,显得人多一些,当然学生们只是跑个3-5公里。这条赛程的上坡下坡较多,前面的14公里,一直保持在6分钟左右每公里,到后边的时候依然有一些上坡,有两个上坡是走着的。最终的成绩是2小时18分钟。差强人意。

在比赛快结束时的一个上坡,碰到一个女孩儿,捂着肚子在走,问她是第几次参加马拉松,她说是第二次,上一次也是这里。在贵阳警官学院读书,本来这次想冲着前10名,却半路阑尾发作。不过仍坚持着完成了比赛。

最后在退芯片排队的时候,也碰到几个其他地方的一些跑友,一个老人接近60岁的样子,说从50岁开始跑马拉松,迄今已经参加过18次马拉松,6次全程。他说第一次跑全程的时候,家人极力反对。

第二天去看了黄果树瀑布,原来可以凭马拉松成绩单买景区门票半价,之前不知道有这项优惠,在结束的时候退芯片排队时间很长,没有去打印成绩。黄果树瀑布值得一看,但并没有让我感到“震撼”,不确定它是不是世界第二大瀑布,期待以后能看到让人震撼的大瀑布,就像电影《普罗米修斯》的开头,那样震撼的场景。

scala类型系统:16) 函数类型

函数类型在写法上

(T1,T2…) => R

小括号里的是入参类型(最多可以有22个,最少为0),右箭头右边的是返回结果类型。

函数类型里可以使用通配符“_”,表示任意类型:

scala> val x: String => _ = null
x: Function1[String, _] = null

右箭头形式的背后是转换成FunctionN[T1,T2…, R] (N对应0~22),有点要注意的是,FunctionN在对其类型参数的定义,入参类型都是逆变的,而结果类型是协变的。它反映了函数类型也是具有多态特性的,参考这篇:scala中函数类型的多态,这里再补充一下温悦在ATA上对这篇blog的评论,他的这张图很好:

有2个函数: f1, f2; 我们若能说f2是f1的子类,当且仅当:f2的定义域类型x2 “大于” f1的定义域类型x1,且f2的值域y2 “小于” f1的值域y1; 其中“大于”指“是父类”;“小于”指“是子类”;

进一步讲,f1(父类函数)能接受的任意参数,f2也能接受,且经由f2映射而得出的结果的类型,也一定在经由f1映射所得结果的类型的“范围内”(是其子类)

再进一步讲:当代码里有对f1的调用“f1(x)”时,你可以尽管将这里的f1换成f2而不会出现类型错误,这也就是关乎“函数类型”的“里氏替换原则(LSP)”