WEB开发网
开发学院软件开发Python 深入 PEAK 的新特性 阅读

深入 PEAK 的新特性

 2007-03-29 12:16:36 来源:WEB开发网   
核心提示: 在开始继续讨论通用函数之前,我们有必要先来看一下 PEAK 的 Wiki 主页(您可以查看这个页面的最新状态,深入 PEAK 的新特性(2),请参阅 参考资料 中的链接)上给出的一个 PEAK 的组件图,图 1. PEAK 的组件断言分派一点简短的提示:术语 “predicat

在开始继续讨论通用函数之前,我们有必要先来看一下 PEAK 的 Wiki 主页(您可以查看这个页面的最新状态,请参阅 参考资料 中的链接)上给出的一个 PEAK 的组件图。

图 1. PEAK 的组件

断言分派

一点简短的提示:术语 “predicate dispatch”比“predicative”使用得更多,尽管后者从文法上来说更加适合。如果我们要在 Web 或者库函数中进行搜索,可以尝试一下这个简短的拼写方法。

基于类型的分派

阅读过我之前编写的有关 Gnosis Utilities 模块 gnosis.magic.multimethods 的文章的读者对于多分派都有一个基本的印象了。现在我们回忆一下,大部分 OOP 编程都是单一的分派;这就是说,只有一个指定的对象用来确定要走哪条代码路径。在一个诸如 foo.doIt(other,args,here) 之类的调用中,点号之前的参数的类 —— 也就是 Foo —— 确定了要运行哪些代码;other 等参数的类型可能会在 Foo.doIt() 的 if 语句中进行测试,但是不会直接影响代码的分派。

从概念上来说,一种更加通用的技术是让函数/方法的所有参数都以相同的度量来确定自己的专有程度。在多分派的系统中,诸如 doIt() 之类的通用函数可以专门用来处理各种专用的类型签名。在 gnosis.magic.multimethods() API 中,这可能会类似于清单 1 所示:

清单 1. multimethods.py 中对类型进行多分派

doIt.add_rule((Foo1, Other2, int), func1)
doIt.add_rule((Foo2, Other1, str), func2)
doIt.add_rule((Foo1, Other1, float), func3)
doIt(foo, other, args) # 'foo' is just one co-equal specializer

上一页  1 2 3 4 5 6  下一页

Tags:深入 PEAK 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接