zip: кажется, что создание не работает в Erlang 22, на окнах - PullRequest
1 голос
/ 08 ноября 2019

Я уже давно использую :zip.create/3 без проблем.

После обновления до Elixir 1.9.2 на Erlang 22 я теперь получаю эту ошибку: {:error, :einval}

Любойпомогите пожалуйста?

defmodule Utils do
   def zip_test do
    data = {"demo.txt", File.read!("demo.txt")}
    IO.puts(inspect(data, @format))
    :zip.create("demo.zip", [data], [:memory])
  end
end
iex> Utils.zip_test
{"demo.txt", "this is a demo"}
{:error, :einval}
iex>

1 Ответ

4 голосов
/ 08 ноября 2019

Типы аргументов, необходимые для функции erlang : zip.create () - это строковые типы erlang. В erlang строковый тип - это список целых чисел. В erlang, в качестве ярлыка, вы можете создать список целых чисел с двойными кавычками, например, «привет». Список будет содержать коды ASCII для указанных символов. С другой стороны, в двойных кавычках эликсира создается строка эликсира , которая эквивалентна двоичному типу erlang . Поэтому вы предоставляете двоичные аргументы, когда вам нужно предоставить списки целых чисел.

Вы можете использовать функцию elixir String.to_charlist () , чтобы создать список целых чисел из строки эликсира:

:zip.create(String.to_charlist("demo.zip"),
           [String.to_charlist("demo.txt")],
           [:memory])

Или вы можете просто использовать одинарные кавычки в эликсире для создания списка целых чисел:

:zip.create('demo.zip', 
            ['demo.txt'], 
            [:memory])

Для получения дополнительной информации см. Совместимость Erlang .

...