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编码的二进制文件。这里的文档用一些示例进行解释: