论坛首页 编程语言技术论坛

rparsec在《Pracical Ruby Projects》中

浏览 1895 次
精华帖 (0) :: 良好帖 (12) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-04  
最近发现《Practical Ruby Projects》用rparsec来讲解怎么在Ruby里构建lisp。于是假公济私地用公司的账户订购了一本,也算给自己捧场。

书拿到,打开一看,好么,被批评了

引用
Caution: For such an excellent library, rparsec plays very fast and loose with namespaces. Its parser classes are installed directly into root namespace. As a library author, try not to do this.


赶紧自己把代码下载下来一看,可不是么,所有的类都在顶层namespace。汗啊!

还是太习惯于java的方式了,潜意识中总是觉得在什么地方放一个"package org.codehaus.rparsec"就好了。结果ruby没这东西。

作为我的第一个(也是迄今为止唯一一个)ruby项目,很多惯用法都不知道。记得当时写完代码,到处问别人:我这些源文件应该怎么组织啊?好像不是跟java似的,有"package"的概念?有classpath?用org/codehaus/rparsec这种方式?旁边的人都是rails的用户,基本上人家告诉说有个rails的咒语怎么念就跟着怎么念的那种,自己都没写过库,所以也都含糊,反正后来凑合着给整上了,到现在也不知道整得对不对。

这个namespace好像一度曾经想过,但是当时觉得“以后问别人怎么弄吧,先写代码去也”,后来也就忘记了。

不过到底应该怎么搞namespace呢?这样?

module org
  module codehaus
    module rparsec
      class Parser
        ...
      end
    end
  end
end


牙磕!

这样?
module RParsec
  class Parser
    ...
  end
end


好点,但是还是不喜欢每个源文件上来就全缩进两格。就没有java的"package RParsec"这类咚咚?Ruby语法这么灵活,应该会有吧?

哎,下一版本如果要改namespace,就要破坏向后兼容性了。好在还没有太多用户呢。

对了,如果你读过这本书,作者对rparsec的使用有一点点偏差,他用"alt(parser1, parser2)" 这个组合子,但是实际上这个alt是一个高级选项,应该用"parser1 | parser2"这个更直观,更不容易出错的组合子,这样书里面提到的一个陷阱就不存在了。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics