2016-09-19 51 views
3

我試圖讓結構工作,但沒有在互聯網或印刷書籍上記錄的例子工作。藥劑:無法訪問結構

在網站上(https://www.tutorialspoint.com/elixir/elixir_structs.htm)這個例子也說明了同樣的問題:

defmodule User do 
    defstruct name: "John", age: 27 
end 

john = %User{} 

#To access name and age of John, 
IO.puts(john.name) 
IO.puts(john.age) 

我得到的錯誤不能訪問結構的用戶,該結構還沒有定義或結構是在同一個被訪問定義它的上下文。

回答

9

您可能試圖使用elixir <filename.exs>來運行此操作,而您可能已經看到類似代碼的書中最有可能將代碼鍵入iex。 (編輯:您鏈接到的頁面上的代碼已從官方教程(http://elixir-lang.org/getting-started/structs.html直接從iex中鍵入該代碼)。這將在iex中運行,但不在exs腳本中運行;這是Elixir「腳本」編譯和評估方式的限制。

我通常包裝在另一個函數的代碼(和可能的另一模塊)並調用,在結束時,我有在exs腳本的創建和使用結構:

$ cat a.exs 
defmodule User do 
    defstruct name: "John", age: 27 
end 

defmodule Main do 
    def main do 
    john = %User{} 
    IO.puts(john.name) 
    IO.puts(john.age) 
    end 
end 

Main.main 
$ elixir a.exs 
John 
27