在 elixir 中访问模块中的函数时变量不存在编译错误
Variable does not exist compilation error while accessing a function in a module in elixir
我是 Elixir 的新手。我正在尝试 运行 模块内的函数。我在文件中的代码如下:
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)
我无法解决给定的错误。有人可以帮我解决这个问题吗?
在 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")
我会在这里给出正确答案,因为@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
是一个普通变量,这就是编译器尝试就地解析它并抛出错误的原因。
我是 Elixir 的新手。我正在尝试 运行 模块内的函数。我在文件中的代码如下:
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)
我无法解决给定的错误。有人可以帮我解决这个问题吗?
在 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")
我会在这里给出正确答案,因为@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
是一个普通变量,这就是编译器尝试就地解析它并抛出错误的原因。