He's Pirate.
string
胸围与罩杯
三 31st
男同学,请回答我。胸围与罩杯是一回事不?如果不是,区别是什么?是不是胸围越大,罩杯就一定也越大呢?
要是女同学,你就找个男同学问一下。
好吧,你有答案了吧。我猜八成的男人一般都不会太清楚这俩到底是不是一回事,区别在哪里。至少我认识相当一部分男人(包括曾经滴我自己)一直以为胸围有多长罩杯就有多大。
其实呐,根本8是这样子滴。就让百度告诉你。
胸围指人体胸部外圈的周长。
from http://baike.baidu.com/view/54963.htm
罩杯的尺寸则由其深度决定。乳房最高点的乳围(三围之一)减去乳房下围一圈的长度,AA 7.5cm A 10cm B 12.5cm C 15 cm D 17.5cm E 20 cm F 22.5cm G 25cm H 27.5cm I 30cm ,两种罩杯间的尺寸则以够长的背扣来解决。
from http://baike.baidu.com/view/426973.htm
由此可见,胸围和罩杯不是一回事,也并非胸围越大,罩杯也越大(相信很多小正太/宅男都有或有过这种错误滴认知)。两个是蛮有差别滴。而且根据这两个定义可以推理。罩杯比较大的女性的胸围肯定在某一个区间,胸围过大或者太小的女性一般来说更难达到C,D等高级CUP。这个推理如果有人不理解,自己慢慢琢磨哈。俺就不解释老。咔咔,或者实在琢磨不明白多多观察。
————————- 俺是坨华丽滴分割线 —————————
好了,啰啰嗦嗦的一大堆,这下不能算俺标题党了吧。开始进入正题,上面那一段主要是想表明,在日常生活中,往往有些概念大家很容易就认为是一致的或相似的,可真正仔细看一下,发现其实还有很大区别的。那么在程序中往往也有很多地方,总感觉是一样的东西,但其实表现来却不是一回事。据个例子吧。
今天hideto同学遇到的一个bug就是,DB中对于某个column的定义,约束这个varchar不能超过222个,而在Rails中与之对应的ActiveRecord对象也声明了这个validation,超过222个就报错。可经过实际测试,发现如果使用英文或数字的话,程序是没错的。如果夹杂了一些汉字,那么发现,还没到222个字符。Rails就报错了。但实际上,数据库是可以插入滴。
问题很简单,字符编码问题。DB中是用的utf-8。而Rails中,AR的那个validates_length_of 中的size没有考虑宽字符的情况。所以, 类似“我love你”.size 返回的就是8,而我们希望得到的是6.
问题很快查明了,自然就容易解决了。可是我突然之间觉得这个小地方还是挺值得玩味的。
自打工作以来一直做的java,而Java天生就是对Unicode支持的,所以在Java的世界,是没有这种情况的,我也一直没仔细思考过,直到遇到了ruby。ruby可不是天生unicode。所以在ruby中,一个中文字符的size就会是2.想得到1,那好吧,请require jcode. 并且调用jsize,而不是size。
只不过是因为字符集的问题,就需要不同的两套方法。在我看来,Matz身为日本人,本应该把这个问题考虑的更加完善一点滴。
和size一模一样的那个方法叫length。最一开始,我觉得真的好方便,ruby真滴好灵活诶。但日子久了,我开始觉得,其实这两个关键字是大有学问滴。只是,好像我接触的语言中并没有区分过两者之间的关系,都当成一样的了。我个人认为这其实很不合适。
size,应该是描述大小,也就重量(质量)的。比如一块蛋糕,比如一件T-shirt。
而length,是描述长度的,比如一条皮带……
所以,这两个其实是不一样的。而对于一个String类来说,这两个方法也应该具有不同的含义。也许你立刻想问一个问题:字符串也就有长度的信息,字符串能有什么重量(质量)啊。那么不好意思,你想当然的错了。YOU ARE WRONG, VERY WRONG!!~~~
字符串的重量,就是字符串在物理的寄存器中所占用的bit。这就是字符串的重量。
所以你看,如果能够把size和length的定义更加清楚一些那么也许就能够避免很多问题。
比如在ruby中,我们需要判断这个字符串的长度,那么就需要length这个方法。但也有时候,我们有个binary string,这时候我们并不会去care他的长度,因为没什么意义。我们这时候care的是这个字符串的大小,比如要大于0.5K,小于2M之类的。这时候就要用到size了。
也许有人认为如果照着我的建议,会使得代码概念混淆加重,但我觉得即便是如果出现这种事,那么肯定也是惯性使然,如果让一个没有程序经验的人直接告诉他size和length是不同的定义。我想他应该不会产生混淆的感觉。特别我越是动态的语言,基础库的特性一定要更加的把握好,力图更加精准,清晰。这样子,才能更友好的方便上层应用与扩展。
按照我刚才的定义,在unicode的语境中,两个方法返回的数字应该是保持一致的。但即便一致,我想如果一门语言能够分清楚和说清楚两者的不同含义,那么好处也是大大的。因为即便你以unicode来存储,即便目前每个字符都可以用一个unicode码来表示。难保将来不出现一门火星语,对吧。如果到时候unicode的16byte空间又无法描述一个火星文了,那么那会就又要混乱了。
所以,我衷心的期望在各种语言中,别再将size和length视为一个方法的两种表达方式。而是让他们各司其职,发挥各自应有的作用。
当然,这八成只能算奢望,好吧,那么就让我期望如果我这辈子要发明一门语言的话,一定要将size与length区别开来。
永远不能忘记 — ”胸围太大并一定值得庆幸喔,也许那胖妞滴CUP只有A“~~~~
好了,现就这样。其实这种类似的小地方,我觉得还是蛮好玩和值得讨论滴。比如我前阵子就曾在公司邮件中聊了把空字符串”与nil滴区别。这个嘛,也许将来会再写一篇。只不过得先想到一个闪亮滴标题才行喔。
PS:这年头,标题党不容易啊。
近期评论