2016-09-19 5 views
3

Я пытаюсь заставить структуры работать, но ни один из документированных примеров в Интернете или печатных книгах не работает.Elixir: Не удается получить доступ к struct

Этот пример на веб-сайте (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) 

Я получаю сообщение об ошибке не может получить доступ к STRUCT пользователя, структура еще не была определена или структура осуществляется доступ в той же контекст, который определяет его.

ответ

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