我是source的新手。我试图在模块内运行一个函数。我在文件中的代码如下:
defmodule greeter do
def print() do
IO.puts "Hello workd"
end
def print(name) do
IO.puts "Hello " <> name
end
defp print(name,age) do
IO.puts "Hello " <>name<>" My age is "<> age
end
end
greeter.print()
greeter.print("Xyxss")
当我在命令行上运行elixirc filename.ex
时,出现以下错误:
warning: variable "greeter" does not exist and is being expanded to "greeter()", please use parentheses to remove the ambiguity or change the variable name
functions.ex:1
== Compilation error in file functions.ex ==
** (CompileError) functions.ex:1: undefined function greeter/0
(stdlib) lists.erl:1354: :lists.mapfoldl/3
(elixir) expanding macro: Kernel.defmodule/2
functions.ex:1: (file)
我无法解决给定的错误。有人可以帮我吗?
答案 0 :(得分:1)
我会在这里给出正确答案,因为@ J.Sebio提供的答案是完全错误的。
Elixir中的模块名称必须是原子。以下两个示例都可以完美运行:
iex(1)> defmodule :foo, do: def yo, do: IO.puts "YO"
iex(2)> :foo.yo
YO
iex(3)> defmodule :"42", do: def yo, do: IO.puts "YO"
iex(4)> :"42".yo
YO
事情是:在Elixir中,大写术语是一个原子:
iex(5)> is_atom(Greeting)
true
这就是为什么大写模块名称的工作原理。此外,greeting
是一个普通变量,这就是编译器尝试在原地解决它并引发错误的原因。
答案 1 :(得分:0)
在elixir中,模块是大写的,通常写成CamelCase
,因此,在您的情况下,您必须将代码重写为:
defmodule Greeter do
def print() do
IO.puts "Hello workd"
end
def print(name) do
IO.puts "Hello " <> name
end
defp print(name,age) do
IO.puts "Hello " <>name<>" My age is "<> age
end
end
Greeter.print()
Greeter.print("Xyxss")