Elixir 如何在字符串类型上编写协议?
我正在尝试为字符串类型编写协议:Elixir 如何在字符串类型上编写协议?,elixir,Elixir,我正在尝试为字符串类型编写协议: defprotocol MyString do def from(data) end defimpl MyString, for: String do def from(string) do String.replace(string, ",", "-") end end 这是可以编译的,但是当我尝试调用字符串上的MyString.from时,我得到 iex> MyString.from("foo,") protocol MySt
defprotocol MyString do
def from(data)
end
defimpl MyString, for: String do
def from(string) do
String.replace(string, ",", "-")
end
end
这是可以编译的,但是当我尝试调用字符串上的MyString.from
时,我得到
iex> MyString.from("foo,")
protocol MyString not implemented for "foo,", This protocol is implemented for: String
如果我为
String.t
、String.Chars
等实现协议,则会出现此错误。如何执行此操作?您可以在此处找到支持的协议类型列表:
您可以对正在构建的协议使用
BitString
。我不确定您使用的是Elixir的哪个版本,但在1.9中,错误消息更有用:(protocol.UndefinedError)protocol MyString未为BitString类型的“foo”实现。此协议针对以下类型实施:字符串
什么是位字符串
与String.t()
?@dopatraman位字符串只是一个位序列。二进制是字节序列,因此它是位字符串的子集,其中始终有8位块。字符串只是一个UTF-8编码的二进制文件。这里的文档用一些示例进行解释: