簡體   English   中英

如何將 Elixir 依賴項導入當前文件/模塊

[英]How to Import Elixir Dependencies Into Current File/Module

我正在嘗試使用十六進制打包的 CSV。

我添加了對 mix.exs 的依賴,如下所示:

  def application do
    [applications: [:logger, :csv]]
  end

  defp deps do
    [
      {:csv, "~> 1.4.2"}
    ]

然后,我在終端中運行mix deps.get & mix deps.compile

依賴文件夾顯示在 deps 文件夾中。

在我嘗試使用依賴項之前,一切似乎都很好。 我收到此錯誤:

“模塊 CSV 未加載且無法找到”

我試過一個簡單的使用而不像這樣導入:

File.stream!("data.csv") |> CSV.decode

我試過像這樣導入:

import(CSV)
File.stream!("data.csv") |> CSV.decode

我試過給 deps 目錄加上前綴:

import(deps.CSV)
File.stream!("data.csv") |> CSV.decode

以及 deps 子目錄的完整路徑:

import(deps.csv.lib.csv.CSV)
File.stream!("data.csv") |> CSV.decode

不管怎樣好像都沒有找到依賴模塊。

我錯過了什么?

我猜你的 IDE 配置錯誤。 這是一個如何啟動和運行的命令行示例。

mix new csv_tester
cd csv_tester
# edit mix.exs to add {:csv, "~> 1.4"} to your deps, like you have above
mix deps.get
iex -S mix
iex(1)> [["name", "age"], ["Bob Saget", 64]] |> CSV.encode() |> Enum.join("")
"name,age\r\nBob Saget,64\r\n"

模塊是全局可訪問的,因此您不需要使用import語句,除非您只需要給定模塊中的特定函數,或者您不想使用模塊名稱完全限定函數調用。 請參閱導入文檔。

您可以在iex中執行的任何內容都應該能夠從項目中的任何其他模塊調用

如果您仍然需要幫助調試,您可以在 iex 中運行它以列出運行時應該可用的所有模塊,然后過濾模塊名稱中包含 CSV 的任何內容:

iex(1)> :code.get_path() |> 
  Enum.map(&to_charlist/1) |> 
  Enum.map(&:erl_prim_loader.list_dir/1) |> 
  Enum.map(&elem(&1, 1)) |> 
  Enum.concat() |> 
  Enum.map(&to_string/1) |> 
  Enum.filter(fn module -> module =~ "CSV" end)

哪個應該輸出這樣的東西

["Elixir.CSV.Encode.beam", "Elixir.CSV.Encoder.beam", "Elixir.CSV.beam",
 "Elixir.CSV.Lexer.EncodingError.beam", "Elixir.CSV.LineAggregator.beam",
 "Elixir.CSV.Parser.beam", "Elixir.CSV.Lexer.beam",
 "Elixir.CSV.Encode.BitString.beam",
 "Elixir.CSV.LineAggregator.CorruptStreamError.beam", "Elixir.CSV.Decoder.beam",
 "Elixir.CSV.Decoder.RowLengthError.beam", "Elixir.CSV.Encode.beam",
 "Elixir.CSV.Parser.SyntaxError.beam", "Elixir.CSV.Encode.Any.beam",
 "Elixir.CSV.Defaults.beam"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM