我试图让结构化工作,但互联网或印刷书籍上没有任何记录的例子有效。
网站上的此示例(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,结构尚未定义或者在定义它的相同上下文中访问结构。
答案 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