到这里一切都还好 。 Swift也可以做到这一切 。 假设它也支持Any接口 , 那么可以定义show方法如下:
然后Point类可以这样写:
但接下来Swift就力不从心了 。 假设我们需要通过UDP套接字发送一个Point的文本表示 , 需要发送一个特殊的表示 。 在Julia中可以这样写:
这样就能通过UDP套接字发送(3, 4)而不是<3,4> 。 这个例子的确不太恰当 , 但可以演示为何多分发要更强大 。
另一个更明显的例子就是处理不同几何形状的交点 。 在游戏编程中经常会用到这一功能 , 来判断不同几何体之间的碰撞情况 。 几何体可能是正方形、圆形或多边形 。 Julia可以定义一个方法来处理所有情况:
实际上这正是Julia中数值提升系统的工作原理 。 它会找到多个数值类型中的最小公倍数 。
多分发的缺点
多分发看起来很不错 , 但它有什么缺点呢?OOP的优点是方法永远属于对象 。 只要有对象 , 就能查找其方法 。 但在Julia中 , 方法属于函数 , 而不是对象(准确地说是类型) 。
如果很熟悉OOP的话 , “方法”这个术语可能会让你感到迷惑 。 看一下collide的例子 , 它演示了collide函数的三个不同的方法 。 方法是函数的具体实现 。 一个函数可以有多个实现 , 每个实现都可以有不同的参数个数和类型 。
因此 , 如果有一个Circle , 我无法得知它有collide方法 , 因为方法属于所有的参数 。
这也意味着Julia中很难获知一个对象是什么 。 Julia并不像OOP语言那样 , 对每个对象及其所有方法有集中的定义 。 但是可以认为 , Julia的思想更函数式一些 。 你不需要关心对象 , 只需要关心函数及函数的行为 。 OOP关注的是名词 , 而Julia关注的是动词 。
参考链接:
https://erik-engheim.scribe.rip/software-engineering-in-swift-go-and-julia-compared-5937bcb63143
《新程序员003》正式上市 , 50余位技术专家共同创作 , 云原生和数字化的开发者们的一本技术精选图书 。 内容既有发展趋势及方法论结构 , 华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等30多家知名公司云原生和数字化一手实战经验!
?爆字节跳动日均进账10.07亿元;iPhone 13粉屏上热搜;英特尔跌落神坛 , CEO回 应:是我们骄傲自大了|极客头条
?尤雨溪:Vue 3 将成为新的默认版本
【从软件工程的角度比较 Swift、Go 和 Julia,我有了这些发现!】?从“去IOE”的替代到开源创新 , 国产数据库的 2021 年
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
