[英]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.