正在阅读:函数式组合子逻辑Java parser框架(一)函数式组合子逻辑Java parser框架(一)

2004-12-02 16:42 出处:CSDN 作者:ajoo 责任编辑:linjixiong

  等等!你可能发现了,现在我们虽然可以自由组合不同的Spredicate对象,但是组合之后有什么用呢?is函数看不见了,难道我们就是为了组合而组合吗?
  不错,一个完整的组合子,还缺最后一小块。

  让我们在predicates包内部再加上一个utility函数:

  public Boolean runPredicate(Spredicate p, String s){
  Return p.is(s);
  }


  好了,功德圆满,我们可以用这个runPredicate函数来执行一个组合好了的Spredicate对象,而不用关心这个对象内部的is函数。

  你可能有点怀疑。RunPredicate(p, s)和p.is(s)有什么区别?

  呵呵,现在是没什么区别。下面我们来看看什么时候这种封装有明显的好处。
  假设根据实现需要我们的Spredicate.is函数不是现在看到的这么简单,它可能是:
  Boolean is(String s, PredicateContext ctxt);
  PredicateContext对象负责存储并传递一些包局部的信息。
  此时,我们很有可能不希望把这个签名对外公布。因为这个签名非常有可能变化,它是一个包的实现细节。PredicateContext甚至都是个包私有的类型。

  此时,把is函数隐藏起来就是必要的了。对外,我们只公开一个runPredicate工具函数:


  public Boolean runPredicate(String s, Spredicate p){
  final PredicateContext ctxt = new PredicateContext();
  return p.is(s, ctxt);
  }


  好,现在客户程序可以随意组合各个Predicate对象,最后用runPredicate函数运行。而包内部在演化时,完全可以根据需要随时改动is函数的签名,增加新的状态。

  这,就是一个完整的组合子的例子。



察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品