Ruby语言的龌龊之处 – “抢床”问题

作者:半瓶墨水   链接:http://www.2maomao.com/blog/ruby-rubbish-dirts/

我很喜欢Ruby的快捷,但是这些龌龊之处仍旧龌龊

1、Ruby的String与Character:习惯中,对一个String取下标应该取出一个字符,但是Ruby中没有字符,取出来是什么?是数字。数字变成字符怎么办?Fixnum.chr,如果想把一个字符串中的汉字取出来怎么办?居然tmd用到了/.{2}/。

2、Ruby的Unicode支持,实在是烂到家了,至今没有权威的文章或者库来搞定中文搜索(在”我们来测试一下”这个字符串中匹配”抢床”看看),这和它没有Character类型很有关系。现在的iconv,kcode,用起来都战战兢兢,不爽。早晚有一天,我们会在Ruby的设计中看到Character的身影。早一点吧…

3、assert_equal对应于assert_not_equal,assert_match却对应于assert_no_match,而且,如果assert_match的第一个参数可以是字符串,内部会自动转换成Regexp,但是assert_no_match呢?该函数里面有句话:
   assert_instance_of(Regexp, regexp, "The first argument should be a Regexp.")

Shit!

Update
关于字符串搜索中的中文问题:在字符串 “我们来测试一下” 中搜索 “抢床” 的问题,在编辑器、搜索工具中普遍存在:
比如UltraEdit、比如微软的FindStr工具、比如linux下面大名鼎鼎的文本搜索工具grep

但是对于C++、python这类有字符、宽字符的语言,只要转化成Unicode字符串就可以搞定。

对于Ruby,用iconv转了以后本质上还是一个单字节序列,没用,还是有这种“抢床”问题。

标签:[tag]Ruby, Unicode, 中文[/tag]

一条评论 发表在“Ruby语言的龌龊之处 – “抢床”问题”上

  1. 哈哈说道:

    ruby文档不够好。
    是开源软件通病。
    ruby做企业级应用还是稚嫩了一点。
    hoho

    你不告诉别人,我也不轻易告诉你t@m.com 哈哈

留下回复