我刚刚观看了Clojure中有关协议的视频,并解释了"多方法"的工作原理.在我看来,它们看起来非常类似于C#中的扩展方法.它们基本上是一回事(除了您不需要在Clojure中创建静态类)或者是否存在根本区别?使用任何一种都有优势或劣势吗?
Clojure中的mutlimethod功能适用于多个调度方案.它有效地启用了运行时多态,其中调用的方法取决于方法的参数类型(传统的单调度多态性取决于接收方法调用的对象的运行时类型).基本上,您可以将单调度多态性视为一种方法M
M(arg1, arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)
并且调用的实际方法取决于运行时类型arg1(因此我们重写了通常的语法
arg1.M(arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)
如
M(arg1, arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)
使类比清楚.在多个分派中,由...调用的方法
M(arg1, arg2, arg3, ..., argn)
Run Code Online (Sandbox Code Playgroud)
依赖于运行时类型的arg1,arg2......,argn以及.
您可以在C#中实现类似的功能dynamic.
坦率地说,它根本与扩展方法无关.
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |