elixir - una - matriz en c++ codigo
¿Cómo imprimir los valores de matriz de un mapa en Elixir? (1)
Debe utilizar IO.inspect
lugar de IO.puts
para imprimir la representación interna de un valor:
iex> IO.puts [1, 2]
^A^B # prints "^A^B"
:ok # return value of IO.puts
iex> IO.inspect [1, 2]
[1, 2] # prints "[1, 2]"
[1, 2] # return value of IO.inspect
Sin embargo, es posible que aún tengas problemas con algunos valores especiales:
iex> IO.inspect [97, 98]
''ab'' # prints "''ab''"
''ab'' # return value of IO.inspect
Para explicar este comportamiento, debemos entender cómo funcionan las cadenas en Elixir. Hay dos tipos de cuerdas. Cadenas binarias (comillas dobles) y listas de caracteres (comillas simples). Internamente, estos se construyen a partir de primitivas más simples. Las cadenas binarias se crean a partir de binarios, y las listas de caracteres se construyen a partir de listas:
iex> "ab" # a binary string
"ab"
iex> <<97, 98>> # the same string in binary syntax
"ab"
iex> ''ab'' # a character list
''ab''
iex> [97, 98] # the same character list in list syntax
''ab''
Puede parecer confuso al principio, pero esto sucede debido a dos cosas. Primero, no hay un tipo de cadena incorporado, como hemos visto, las cadenas se construyen a partir de otros tipos primitivos. En segundo lugar, no hay tipos definidos por el usuario en Elixir. Entonces, cuando Elixir ve una lista con solo números enteros, intenta imprimirla como una cadena para su conveniencia. Sin embargo, bajo el capó todavía es sólo una lista de enteros.
En los ejemplos anteriores, 97
y 98
representan los puntos de código Unicode para los caracteres a
y b
por lo que estos se mostrarán como una cadena, incluso si se usa IO.inspect
.
Ahora puede ver por qué se imprimió ^A^B
en sus ejemplos: estos son solo caracteres de control de la codificación ASCII , que están representados por los puntos 1
código 1
y 2
.
Sin embargo, puede pasar la opción char_lists: :as_lists
para imprimir listas sin procesar sin intentar realizar dicha conversión:
iex> IO.inspect [97, 98], char_lists: :as_lists
[97, 98] # prints ''[97, 98]''
''ab'' # Iex still shows the return value as ''ab''
Si abre iex
y escribe h Inspect.Opts
, verá que Elixir hace este tipo de cosas con otros valores también, específicamente estructuras y binarios.
Soy nuevo en Elixir de Ruby y estoy tratando de imprimir los valores de matriz de un mapa usando el siguiente código:
map-script.ex
list = [0, 1]
map = %{0 => [1, 2], 1 => [2, 3]}
Enum.each list, fn n ->
IO.puts map[n]
end
Salida:
^A^B
^B^C
¿Qué estoy haciendo mal? Elixir se parece a Ruby pero se comporta de manera diferente ...