编程语言特性:Swift 协议、Scala 模式匹配与并发编程
1. Swift 协议的特点与问题
Swift 协议允许在任何时候为任何给定类型定义和实现协议。然而,协议的实现是在类或结构体内部定义的,这会导致类或结构体全局改变。
例如,假设有两个不同的 JSON 协议:
protocol JSONA {
func toJSON(precision: Integer) -> String
}
protocol JSONB {
func toJSON(scale: Integer) -> String
}
如果这两个协议对于精度参数的处理规范不同,那么一个类或结构体只能实现其中一个协议。因为实现任何一个协议都意味着向类或结构体添加一个 toJSON(Integer) 方法,而每个类或结构体只能有一个这样的方法。
2. Elixir 协议的优势
Elixir 协议受 Clojure 协议的影响很大,协议的实现与协议本身相关,而不是与实现协议的数据类型相关。这意味着可以为相同的数据类型实现多个协议,且不会发生冲突。
defprotocol JSONA do
def to_json(data, precision)
end
defprotocol JSONB do
def to_json(data, scale)
end
defimpl JSONA, for: Integer do
de
超级会员免费看
订阅专栏 解锁全文
11

被折叠的 条评论
为什么被折叠?



