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]

555,本篇现在一条评论也没有,雁过留声,人过留名,各位乡亲父老,有钱的捧个钱场,没钱的捧个人场......

发表评论

  • :(
  • :)
  • :D
  • :X
  • :^
  • :d
  • :e
  • :h
  • :k
  • :l
  • :p
  • :q
  • :s
  • :v
  • :w
  • :x

注意:评论中需包含至少一个中文字,否则视为无效