Elixir:无法访问struct

时间:2016-09-19 14:55:37

标签: struct elixir

我试图让结构化工作,但互联网或印刷书籍上没有任何记录的例子有效。

网站上的此示例(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 User,结构尚未定义或者在定义它的相同上下文中访问结构。

2 个答案:

答案 0 :(得分:15)

您可能尝试使用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

答案 1 :(得分:0)

将结构创建和其他相关操作包装在模块中就足够了。

defmodule Customer do
  defstruct name: "", company: ""
end

defmodule BugReport do
  defstruct owner: %Customer{}, details: "", severity: 1
end

defmodule Playground do
  report = %BugReport{owner: %Customer{name: "X", company: "X"}}
  IO.inspect report
end

$ elixir ./your_filename.ex