Elixir:定义地图的问题

Ven*_*ham 1 elixir

我有一个预定义的Maps,其中有一个数字作为键及其值,我尝试通过在CL中像下面这样创建映射来正常工作,但是当我通过代码文件执行时会抛出类似错误。

我说错了

** (Protocol.UndefinedError) protocol String.Chars not implemented for %{1 => "I", 4 => "IV", 5 => "V", 9 => "VI", 10 => "X", 40 => "XL", 50 => "L", 90 => "XC", 100 => "C", 400 => "CD", 500 => "D", 900 => "CM", 1000 => "M"} of type Map
    (elixir) lib/string/chars.ex:3: String.Chars.impl_for!/1
    (elixir) lib/string/chars.ex:22: String.Chars.to_string/1
    (elixir) lib/io.ex:654: IO.puts/2
Run Code Online (Sandbox Code Playgroud)

当我尝试定义预定义的键值时。

defmodule DecimalToRoman do
  def convert(decimal) do
    roman_table = %{
      1 => "I",
      4 => "IV",
      5 => "V",
      9 => "VI",
      10 => "X",
      40 => "XL",
      50 => "L",
      90 => "XC",
      100 => "C",
      400 => "CD",
      500 => "D",
      900 => "CM",
      1000 => "M"
    }

    IO.puts(roman_table)
  end
end

DecimalToRoman.convert(2012)

Run Code Online (Sandbox Code Playgroud)

我想使用数字作为密钥。

Rah*_*rma 5

使用IO.inspect(roman_table)

IO.puts要求参数可以是字符串,也可以是实现String.Chars协议的任何参数,同时IO.inspect可以显示任意药剂的术语。

核心库实现 String.CharsAtomBitStringListInteger,和Float